是否有一种巧妙的方法将嵌套的data.frame转换为分层列表?
我在下面使用for循环进行此操作,但理想情况下,有一个更整洁的解决方案,可以推广到任意数量的嵌套列。
nested_df <- expand.grid(V1 = c('a','b','c'),
V2 = c('z','y'))%>%
group_by_all()%>%
do(x=runif(10))%>%
ungroup
nested_ls <- list()
for(v1 in unique(nested_df$V1)){
for(v2 in unique(nested_df$V2)){
nested_ls[[v1]][[v2]] <- nested_df%>%
filter(V1==v1 & V2==v2)%>%
pull(x)%>%
unlist
}
}
str(nested_ls)
答案 0 :(得分:3)
如果您对名称z
和y
的要求不是很严格,并且还可以与[[1]]
和[[2]]
一起使用,那么您可以直接使用
split(nested_df$x, nested_df$V1)
如果需要名称,那么
lapply(split(nested_df, nested_df$V1), function(i)split(i$x, i$V2))
#Or as @Frank mentions in comments, we can use setNames
lapply(split(nested_df, nested_df$V1), function(i) setNames(i$x, i$V2))