r - 如何使用 tidyverse 函数在 R 中的嵌套 df 中选择所有共享列?
问题描述
我在下面提出了一个代表。我创建了一个嵌套的df
. 该cols
列表示嵌套中的列df
。我正在使用该cols
列传递给使用map
.
在这种情况下,这将是lifeExp
列。
我如何传递一个select
查看cols
列和selects
该行中存在的字符向量列名称的a,然后是嵌套dfselect
中的该行?sd_col
另外,我想传递country
,continent
和sd
同一个select
. 所以在这种情况下,我们将选择 , country
, continent
, lifeExp
, 和sd
嵌套df
在sd_col
.
我猜这可以使用purrr
.
library(gapminder)
library(tidyverse)
data <- gapminder_unfiltered
sample_fn1 <- function(data, cols){
testdata <- data %>%
mutate(across(!!cols, mean))
}
sample_fn2 <- function(data, cols){
testdata <- data %>%
mutate(sd = sd(pop))
}
nested_data <- data %>%
filter(country %in% c("United States", "Mexico", "Canada", "Argentina", "Brazil", "Italy", "Japan")) %>%
mutate(
country_group = case_when(
country %in% c("United States", "Mexico", "Canada") ~ "North America",
country %in% c("Argentina", "Brazil") ~ "South America",
country %in% c("Italy", "Japan") ~ "Eurasia"
)
) %>%
group_by(country_group) %>%
nest() %>%
ungroup()
> nested_data
# A tibble: 3 x 2
country_group data
<chr> <list>
1 South America <tibble[,6] [24 x 6]>
2 North America <tibble[,6] [127 x 6]>
3 Eurasia <tibble[,6] [114 x 6]>
下一个
使用的列
col_tbl <- tibble::tribble(
~country_group, ~cols,
"North America", c("lifeExp", "pop"),
"South America", c("lifeExp", "gdpPercap"),
"Eurasia" , c("lifeExp", "pop")
)
> col_tbl
# A tibble: 3 x 2
country_group cols
<chr> <list>
1 North America <chr [2]>
2 South America <chr [2]>
3 Eurasia <chr [2]>
加入 cols 以用于 df
nested_data <- nested_data %>%
left_join(col_tbl)
#> Joining, by = "country_group"
> nested_data
# A tibble: 3 x 3
country_group data cols
<chr> <list> <list>
1 South America <tibble[,6] [24 x 6]> <chr [2]>
2 North America <tibble[,6] [127 x 6]> <chr [2]>
3 Eurasia <tibble[,6] [114 x 6]> <chr [2]>
运行 2 个函数
nested_data <- nested_data %>%
mutate(nest1 = map2(data, cols, sample_fn1),
nest2 = map(data, sample_fn2),
# select specified columns
nest1 = map(nest1, ~select(.x, c(country, year, continent)))
)
> nested_data
# A tibble: 3 x 5
country_group data cols nest1 nest2
<chr> <list> <list> <list> <list>
1 South America <tibble[,6] [24 x 6]> <chr [2]> <tibble[,3] [24 x 3]> <tibble[,7] [24 x 7]>
2 North America <tibble[,6] [127 x 6]> <chr [2]> <tibble[,3] [127 x 3]> <tibble[,7] [127 x 7]>
3 Eurasia <tibble[,6] [114 x 6]> <chr [2]> <tibble[,3] [114 x 3]> <tibble[,7] [114 x 7]>
解决方案
推荐阅读
- android - 单击通知 FCM 时未打开所需的活动
- php - 自定义 tag.php 模板
- yii2 - 如何在 yii2 中手动向供应商添加扩展
- javascript - 多次调用函数并保存结果
- android - 如何使用 NativeScript 获取主 Google 帐户?
- javascript - 类型错误:this.props.weather 未定义
- git - ssh:无法解析主机名 git:名称或服务未知 致命:无法从远程存储库读取
- python - 无法在 python(jupyter)中创建术语文档矩阵
- highcharts - highstock:当系列与 sma 相交时如何更改区域样条中的颜色
- java-9 - GluonVM、源代码和 JDK 兼容性