将一组数据集进行行绑定?

5
我已经读入了一组数据集并将其称为n。我想做的是从n中取一个数据集子集,并在R中将它们行链接在一起。当我尝试执行rbind(n)时,这只给我所有数据集名称的数据框,而不是实际将每个数据集的元素放在彼此下面。我想做的是绑定共享相同名称的数据集子集。例如,有18个数据集以“4.”开头,我想将它们全部绑定在一起。有没有简单的方法来做到这一点?
2个回答

11
您想要做的是rbind(n[[1]],n[[2]],...),这与rbind(n)不同。
您可以使用do.call创建并执行此call,而无需编写它。
 do.call(rbind, n)

这将运行您想要的命令。然而,这是众所周知的很慢

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

 library(data.table)

 rbindlist(n)

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

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

太棒了,谢谢,这正是我想要的!现在如何对一个子集进行操作呢?比如说,文件名中包含“4.”但不需要去查看列表中哪些数字属于这些文件? - user1836894
这些是列表元素的名称吗? - mnel
+1!@mnel 可以将模式从数字更改为有效的文件名!以4开头的文件名看起来很奇怪。您可以给出名称列表 n [filtred.names] - agstudy
是的!谢谢,这正是我想要的!很抱歉打扰您,但是在某些数据集中使用不同数量的列进行绑定是否可能?例如像'rbind.fill'一样,但是使用您建议的'rbindlist'呢? - user1836894
我这里有一个未优化的方法在这里。这个方法不会像rbindlist那样快。 - mnel
显示剩余2条评论

1
如果你想合并多个文件,可能需要使用plyr包中的函数(我不知道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的相当实现,但我实现了一些东西 https://dev59.com/_2Up5IYBdhLWcg3w1aF7#15017231 - mnel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接