绑定一组数据集的行?
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以上是关于绑定一组数据集的行?的主要内容,如果未能解决你的问题,请参考以下文章
我的 Access 数据库不返回任何带有 xsd 数据集的行