我有一个有三个级别的嵌套列表。我需要取消中间级别,但我还没有找到一种简单的方法。
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]]))
答案 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)