合并大量data.frames 例如data.frames: df1 = data.frame(id=c('1','73','2','10','43'),v1=c(1,2,3,4,5)) <br> df2 = data.frame(id=c('7','23','57','2','62','96'),v2=c(1,2,3,4,5,6)) <br> df3 = data.frame(id=c('23','62'),v3=c(1,2)) <br>注意:id每个data.frame都是唯一的。我希望得到的矩阵看起来像1 1 NA NA 2 3 4 NA 7 NA 1 NA 10 4 NA NA 23 NA 2 1 43 5 NA NA 57 NA 3 NA 62 NA 5 2 73 2 NA NA 96 NA 6 NA在这种情况下,我只显示3个数据集,我实际上至少有22个数据集,所以最后我想要一个nx(22 + 1)矩阵,其中n是所有22个数据集的id数。 给定2个数据集,我需要ids在第一列中获取它们,第二列和第三列用值填充,如果没有值,则输入NA。
2 回答
小怪兽爱吃肉
TA贡献1852条经验 获得超1个赞
把它们放入一个list,并使用merge与Reduce
Reduce(function(x, y) merge(x, y, all=TRUE), list(df1, df2, df3))
# id v1 v2 v3
# 1 1 1 NA NA
# 2 10 4 NA NA
# 3 2 3 4 NA
# 4 43 5 NA NA
# 5 73 2 NA NA
# 6 23 NA 2 1
# 7 57 NA 3 NA
# 8 62 NA 5 2
# 9 7 NA 1 NA
# 10 96 NA 6 NA
您还可以使用这个更简洁的版本:
Reduce(function(...) merge(..., all=TRUE), list(df1, df2, df3))
DIEA
TA贡献1820条经验 获得超2个赞
为Reduce
。对于这个简单的例子,这相当于merge(merge(df1, df2, by='id', all=T), df3, by='id', all=T)
。很明显,可以使用一个循环,遍历数据框 - 但这正是Reduce
它的作用。
- 2 回答
- 0 关注
- 564 浏览
添加回答
举报
0/150
提交
取消