Dir*_*way 5 merge r reshape dataframe
我正在尝试按行名称合并多个数据框.
我知道怎么做两个:
x = data.frame(a = c(1,2,3), row.names = letters[1:3])
y = data.frame(b = c(1,2,3), row.names = letters[1:3])
merge(x,y, by = "row.names")
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用reshape软件包时,merge_all()我遇到了错误.
z = data.frame(c = c(1,2,3), row.names = letters[1:3])
l = list(x,y,z)
merge_all(l, by = "row.names")
Error in -ncol(df) : invalid argument to unary operator
Run Code Online (Sandbox Code Playgroud)
最好的方法是什么?
通过row.names奇怪的事情进行合并- 它会创建一个名为Row.names的列,这会使后续的合并变得困难.
为了避免这个问题,您可以改为创建一个带有行名称的列(无论如何,这通常是一个更好的主意 - 行名称非常有限并且难以操作).使用OP中给出的数据执行此操作的一种方法(不是最佳方式,对于处理矩形数据的更优化和更简单的方法,我建议data.table相反):
Reduce(merge, lapply(l, function(x) data.frame(x, rn = row.names(x))))
Run Code Online (Sandbox Code Playgroud)