List 我可以将类似数据帧的列表合并到单个数据帧中吗?

List 我可以将类似数据帧的列表合并到单个数据帧中吗?,list,r,dataframe,List,R,Dataframe,我有一个数据帧: foo <- list(df1 = data.frame(x=c('a', 'b', 'c'),y = c(1,2,3)), df2 = data.frame(x=c('d', 'e', 'f'),y = c(4,5,6))) ?执行。调用(“rbind”,foo)应该可以做到这一点。您的代码有几个问题 首先,列表中的赋值语句不起作用。这需要通过以下方式解决,例如: foo <- list( df1 = data.fram

我有一个数据帧:

foo <- list(df1 = data.frame(x=c('a', 'b', 'c'),y = c(1,2,3)), 
            df2 = data.frame(x=c('d', 'e', 'f'),y = c(4,5,6)))

执行。调用(“rbind”,foo)应该可以做到这一点。

您的代码有几个问题

首先,列表中的赋值语句不起作用。这需要通过以下方式解决,例如:

foo <- list(
        df1 = data.frame(x=c('a', 'b', 'c'), y = c(1,2,3)), 
        df2 = data.frame(x=c('d', 'e', 'f'), y = c(4,5,6))
)

但这带来了更多的问题。例如,首先为什么要将数据帧合并到列表中。第二个问题是您是否真的需要使用数据帧而不是向量。最后,在以这种方式组合数据帧时,我通常会尽量避免使用rbind(),而使用merge()。

使用
merge(foo[[1]],foo[[2]],all=TRUE)怎么样

foo <- list(df1 = data.frame(x=c('a', 'b', 'c'),y = c(1,2,3)), 
        df2 = data.frame(x=c('d', 'e', 'f'),y = c(4,5,6)))

library(plyr)
ldply(foo)[,-1]
  x y
1 a 1
2 b 2
3 c 3
4 d 4
5 e 5
6 f 6

foo感谢您指出我代码中的错误。我已经修好了。也谢谢你的回答——我不知道它这么简单。实际的数据帧要大得多,我的工作流经常使用lappy,这里我只想绑定数据帧,以便
xtable
将mae作为一个表。@David,这现在完全有意义了。如果您经常使用Lappy,您可能还希望了解plyr中的函数,它为此类问题提供了一个通用框架。然后,解决方案简单地变成ldply(foo,rbind),也就是
plyr
中的
rbind.fill
,其工作原理类似于
do.call(“rbind”,list)
,但允许不匹配的列名。相关:和。。。问问题前请先搜索:如果我能记住至少两个appx标题相同的问题,你没有做任何努力,是吗?@Joris,谢谢你指出这些问题,但你的记忆功能比我的查询好+SO搜索引擎:这些答案都没有出现在“[r]+list+dataframe”的89个结果中或者我搜索的前100条记录,包括“[r]将列表转换为数据帧”和“[r]将列表合并为数据帧”。如果您能给我一些搜索建议,我将不胜感激。使用[r]合并数据框,您可以在第一页找到至少一个相关问题。使用[r]组合列表数据框,您可以将其作为第二个答案。我同意当你把数据框写成一个单词时,它会变得很棘手。很抱歉我之前评论的语气很严厉。旁注:最好将这些单词分开,因为相当多的人将它们写成数据框(被搜索引擎识别为两个单词)。更有效的解决方案是从data.table中选择
rbindlist
。检查详细信息和基准。
rbind\u列表
现在已被弃用,您应该改用
dplyr::bind\u行
rbind(foo$df1, foo$df2)

  x y
1 a 1
2 b 2
3 c 3
4 d 4
5 e 5
6 f 6
foo <- list(df1 = data.frame(x=c('a', 'b', 'c'),y = c(1,2,3)), 
        df2 = data.frame(x=c('d', 'e', 'f'),y = c(4,5,6)))

library(plyr)
ldply(foo)[,-1]
  x y
1 a 1
2 b 2
3 c 3
4 d 4
5 e 5
6 f 6