Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用reduce合并数据帧-如何添加Merge by选项_R_List_Dataframe_Merge_Reduce - Fatal编程技术网

使用reduce合并数据帧-如何添加Merge by选项

使用reduce合并数据帧-如何添加Merge by选项,r,list,dataframe,merge,reduce,R,List,Dataframe,Merge,Reduce,我的代码: 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(f

我的代码:

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)
然而,我想要的输出是

  names X1    X2.x    X2.y
1  Dave  25    NA      NZ
2  John  21    22      US
3   Sam  22    25      SA 

我知道,如果我以不同的方式命名列,我可以获得所需的输出,但这不是这里的选项。具体地说,我想知道如何添加带有Reduce函数的“by=“X1”参数,就像在merge函数中单独使用的那样。

注释中@calwellst所说的,但需要做一些准备(比如键入)

merged=Reduce(函数(…)merge(…,all=T,by=“X1”),mylist)
  names X1    X2.x    X2.y
1  Dave  25    NA      NZ
2  John  21    22      US
3   Sam  22    25      SA 
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