我的代码:
df1 <- data.frame("X1"=c("John","Sam","Dave"),"X2"=c(21,22,25))
df2 <- data.frame("X1"=c("John","Sam"),"X2"=c(22,25))
df3 <- data.frame("X1"=c("John","Sam","Dave"),"X2"=c("US","SA","NZ"))
mylist <- list(df1,df2,df3)
merged= Reduce(function (...) merge(..., all= T), mylist)
我的输出是:
X1 X2
1 Dave 25
2 Dave NZ
3 John 21
4 John 22
5 John US
6 Sam 22
7 Sam 25
8 Sam SA
然而,我想要的输出是
names X1 X2.x X2.y
1 Dave 25 NA NZ
2 John 21 22 US
3 Sam 22 25 SA
我知道,如果以不同的方式命名列,我可以获得所需的输出,但这不是一个选项。具体来说,我想知道如何将"by="X1参数与Reduce函数一起添加,就像单独在merge函数中使用的那样
@caldwellst在评论中说了什么,但有一些准备(如键入(。
library( data.table )
#set as data.table
lapply( mylist, setDT )
#set keys
lapply( mylist, setkey, X1)
#merge
Reduce( function(...) merge(..., all = TRUE), mylist )
# X1 X2.x X2.y X2
# 1: Dave 25 NA NZ
# 2: John 21 22 US
# 3: Sam 22 25 SA