如何在R嵌套列表中取消任意级别?

时间:2015-05-25 11:40:52

标签: r dataframe

我有一个有三个级别的嵌套列表。我需要取消中间级别,但我还没有找到一种简单的方法。

E.g。

df1 <- data.frame(X = sample(100),
                  Y = sample(100))
df2 <- data.frame(X = sample(50),
                  Y = sample(50))
df3 <- data.frame(X = sample(150),
                  Y = sample(150),
                  Z = sample(150)) 
df4 <- data.frame(X = sample(20),
                  Y = sample(20),
                  Z = sample(20))

list1 <- list(A = df1, B = df2)
list2 <- list(A = df3, B = df4)

masterList <- list(list1, list2)

我想要实现的是

newMasterList <- list(A = rbind(df1,df2), B = rbind(df3,df4))

我已尝试使用两种递归选项取消列表(),但它们不会产生所需的结果:

newMasterListFAIL1 <- lapply(seq_along(masterList), function(x) unlist(masterList[[x]], recursive = F))

newMasterListFAIL2 <- lapply(seq_along(masterList), function(x) unlist(masterList[[x]]))

1 个答案:

答案 0 :(得分:3)

您可以从rbindlist包中快速data.table尝试(但data.frame的列表将转换为data.table列表):

library(data.table)

newMasterList = lapply(masterList, rbindlist)

来自@akrun的基本R解决方案:

newMasterList = lapply(masterList, function(x) do.call(rbind, x))

来自@David Arenburg的优雅解决方案

library(tidyr)

newMasterList = lapply(masterList, unnest)