我有一个列表列表,其中一些列表为NULL(不包含任何内容),有些列表包含12列和1行。让我们说这个列表列表命名为:pages。
我想将包含12列和1行的列表合并到数据帧中。所以我有一个12列和x行的最终数据帧。
我第一次尝试:
final_df <- Reduce(function(x,y) merge(x, y, all=TRUE), pages)
产生了一个右边12列但没有行的数据框,所以它是空的。
然后我尝试了:
listofvectors <- list()
for (i in 1:length(pages)) {listofvectors <- c(listofvectors, pages[[i]])}
只是将每个列表粘贴在彼此之下。
我终于尝试过玩:
final<-do.call(c, unlist(pages, recursive=FALSE))
只会产生很长的价值。
我错过了什么?谁能帮助我?非常感谢您的投入。
答案 0 :(得分:2)
merge
函数用于连接公共列值的数据(通常称为join
)。您需要使用rbind
代替( r 代表行,使用cbind
将列粘在一起)。
do.call(rbind, pages) # equivalent to rbind(pages[[1]], pages[[2]], ...)
do.call(rbind, pages[lengths(pages) > 0]) # removing the 0-length elements
如果您还有其他问题,请在问题中提供可重复的示例。此代码适用于此示例:
x = list(data.frame(x = 1), NULL, data.frame(x = 2))
do.call(rbind, x)
# x
# 1 1
# 2 2