绑定一组数据集的行?

Posted

技术标签:

【中文标题】绑定一组数据集的行?【英文标题】:Row Binding a Set of Data Sets? 【发布时间】:2013-02-10 03:26:01 【问题描述】:

我已读入数据集列表并将其命名为 n。我想做的是从 n 中获取数据集的一个子集,然后在 R 中将它们绑定在一起。当我尝试使用 rbind(n) 时,这只是给了我所有数据集名称的数据框,而不是实际放置每个数据集的元素在彼此之下。我想要做的是绑定共享一个通用名称的数据集的子集。例如,18 个数据集以“4”开头。我想把所有这些结合在一起。有没有简单的方法可以做到这一点?

【问题讨论】:

【参考方案1】:

你想做的是rbind(n[[1]],n[[2]],...),这和rbind(n)不一样。

这个不用写出来,可以用do.call创建并执行这个call

 do.call(rbind, n)

它将运行您想要的命令。但是,这是notoriously slow

您可以使用 data.table 包中的 rbindlist 更快地完成相同的操作

 library(data.table)

 rbindlist(n)

如果你只想要那些名称以4开头的元素

rbindlist(n[grep(names(n), pattern = '^4')])

【讨论】:

太棒了,谢谢你,这正是我想要的!现在我该如何对一个子集执行此操作,例如包含“4”的文件。在他们的名字中的某个地方,实际上不必去查看这些文件属于列表中的哪些数字? @user1836894 这些是列表元素的名称吗? 是的。我有一个文件列表,这些是属于文件子集的名称。 @user1836894 添加了一个方法,如果不合适请告诉我。 +1! @mnel 可能会将模式从数字更改为有效的文件名!以 4 开头的文件名看起来很奇怪。您可以提供名称列表n[filtred.names]【参考方案2】:

如果您尝试聚合许多文件,您可能需要 plyr 包中的 rbind.fill 函数(我不知道是否有等效的 data.table)

ll <- list(a=data.frame(x=1,y=2,z=1),
         b= data.frame(x=2,y=3),
         c=data.frame(x=3:4,y=5))

library(plyr)
Reduce(rbind.fill,ll[c('a','b')])   ## subset by list names and 
                                    ## apply recursively using Reduce
  x y  z
1 1 2  1
2 2 3 NA

【讨论】:

我不知道 rbind.fill 等价物,但我实现了一些东西 ***.com/a/15017231/1385941

以上是关于绑定一组数据集的行?的主要内容,如果未能解决你的问题,请参考以下文章

绑定一组 ng-options 的一个属性

我的 Access 数据库不返回任何带有 xsd 数据集的行

当数据集的列具有不同的行数时合并它们

如何为用作 DataGrid 的 ItemsSource 的项目的集合属性中的每个项目生成和绑定一列

整个数据集的回归线以及基于组的回归线

计算列子集的行均值