我为一些数据创建了一个双嵌套结构。如何访问第 2 级的数据(或就此而言第 n 级?)
library(gapminder)
library(purrr)
library(tidyr)
gapminder
nest_data <- gapminder %>% group_by(continent) %>% nest(.key = by_continent)
nest_2<-nest_data %>% mutate(by_continent = map(by_continent, ~.x %>% group_by(country) %>% nest(.key = by_country)))
我现在如何将中国的数据从 nest_2 中获取到数据框或 tibble 中?
我可以得到整个亚洲的数据,但我无法孤立中国。
a<-nest_2[nest_2$continent=="Asia",]$by_continent ##Any better way of isolating Asia from nest_2?
我以为我可以做到
b<-a[a$country=="China",]$by_country
但我收到以下错误
Error in a[a$country == "China", ] : incorrect number of dimensions
> glimpse(a)
List of 1
$ :Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 33 obs. of 2 variables:
..$ country : Factor w/ 142 levels "Afghanistan",..: 1 8 9 19 25 56 59 60 61 62 ...
..$ by_country:List of 33
所以我最大的错误是没有认识到产品是一个列表,可以通过在最后添加 [[1]] 来纠正。但是,我非常喜欢@Floo0 的解决方案。我冒昧地提供了一个函数来获取变量的名称,以防列的顺序与提供的不同。
select_unnest <- function(df, listcol, var, var_val){ ###listcol, var and var_val must enclosed by ""
df[[listcol]][df[[var]]==var_val][[1]]
}
nest_2 %>% select_unnest(listcol = "by_continent", var = "continent", var_val = "Asia") %>%
select_unnest(listcol = "by_country", var = "country", var_val = "China")