一部のデータに対して二重にネストされた構造を作成しました。第 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 からデータフレームまたはティブルに取得するにはどうすればよいですか?
アジア全体のデータを取得できますが、中国を分離することはできません。
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")