将嵌套的data.frame转换为分层列表

时间:2019-03-20 15:40:48

标签: r tidyr

是否有一种巧妙的方法将嵌套的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)

1 个答案:

答案 0 :(得分:3)

如果您对名称zy的要求不是很严格,并且还可以与[[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))