gpt4 book ai didi

r - 如何使用 tidyr 自动创建变量?

转载 作者:行者123 更新时间:2023-12-04 08:11:00 26 4
gpt4 key购买 nike

考虑这个简单的例子:

mytib <- tibble(city_name1 = c('nyc', 'DC'),
city_name2 = c('US', 'US'),
planet_name1 = c('earth', 'moon'),
planet_name2 = c('solar', 'solar'))

# A tibble: 2 x 4
city_name1 city_name2 planet_name1 planet_name2
<chr> <chr> <chr> <chr>
1 nyc US earth solar
2 DC US moon solar
我正在尝试自动创建一些使用 tidyr 的简单变量。 .具体来说,我只是简单地添加了两个字符变量 _name1_name2对于每个主题。如下:
> mytib %>% 
+ tidyr::unite(complete_city,
+ c('city_name1', 'city_name2'), remove = FALSE) %>%
+ tidyr::unite(complete_planet,
+ c('planet_name1', 'planet_name2'), remove = FALSE)
# A tibble: 2 x 6
complete_city city_name1 city_name2 complete_planet planet_name1 planet_name2
<chr> <chr> <chr> <chr> <chr> <chr>
1 nyc_US nyc US earth_solar earth solar
2 DC_US DC US moon_solar moon solar
问题是我想自动化这个。也就是说,循环主题 cityplanet .我怎样才能做到这一点?我尝试了以下但没有成功:
for(topic in c('city', 'planet')){

mytib <- mytib %>%
tidyr::unite('complete_{{topic}}',
c('{{topic}}_name1', '{{topic}}_name2'), remove = FALSE)
}
谢谢!

最佳答案

我们可以将自定义函数与 purrr::reduce() 一起使用:

library(dplyr)
library(tidyr)
library(purrr)

mytib <- tibble(city_name1 = c('nyc', 'DC'),
city_name2 = c('US', 'US'),
planet_name1 = c('earth', 'moon'),
planet_name2 = c('solar', 'solar'))


myunite <- function(df, x) {
tidyr::unite(df, !! paste0("complete_", x),
paste0(x, "_name", 1:2),
# alternatively: starts_with(x),
remove = FALSE)
}

mytib %>%
reduce(c("planet", "city"), myunite, .init = .)
#> # A tibble: 2 x 6
#> complete_city city_name1 city_name2 complete_planet planet_name1 planet_name2
#> <chr> <chr> <chr> <chr> <chr> <chr>
#> 1 nyc_US nyc US earth_solar earth solar
#> 2 DC_US DC US moon_solar moon solar
创建于 2021-01-29 由 reprex package (v0.3.0)
另一种方法是重命名一些变量并使用 dplyr::across()而不是 tidyr::unite .

mytib %>% 
rename_with(~ gsub("1$", "", .)) %>%
mutate(across(matches("_[A-z]*$"),
~ str_c(get(cur_column()),"_",get(str_c(cur_column(), 2))),
.names = "complete_{col}"))
#> # A tibble: 2 x 6
#> city_name city_name2 planet_name planet_name2 complete_city_n~
#> <chr> <chr> <chr> <chr> <chr>
#> 1 nyc US earth solar nyc_US
#> 2 DC US moon solar DC_US
#> # ... with 1 more variable: complete_planet_name <chr>
创建于 2021-01-29 由 reprex package (v0.3.0)

关于r - 如何使用 tidyr 自动创建变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65957779/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com