r-使用reduce-how添加Merge by选项合并数据帧



我的代码:

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

最新更新