合并3个彼此不同的数据框

时间:2019-08-16 10:05:22

标签: r dataframe merge

我想合并3个不同的数据帧。我有一排只有几行,另一排有不同的Key。请参见下面的数据框

df1 <- data.frame(date = c("12/03/2013","12/03/2013","12/03/2013"), f1 = c(189,256,389), f2 = c("NY","MB","LT"))
df2 <- data.frame(date = c("12/03/2013","12/03/2013"), Added_f1 = c(178,49), added_f2 = c("okr","nor"))
df3 <- data.frame(date = c("07/09/2016","07/09/2016","07/09/2016"), f1 = c(190,200,367), f5 = c("so","yo","kl"),f7 = c("sott","yogh","klop"))

我确实想使用日期作为键来合并它们。我尝试了这些选项,但是会产生不匹配的错误,**必须指定唯一有效的*列*

Reduce(function(x,y) merge(x,y,by="date",all=TRUE) ,list(df1,df2,df3))

注意,每个数据框中的列名可以不同。由于列完全不同,因此可以在右侧合并第二个数据帧,但是由于键不同并且列可以具有那些匹配而其他不匹配的列,因此如何合并第三个数据帧。我确实想要一张桌子。

1 个答案:

答案 0 :(得分:0)

如果严格只需要合并3个数据帧,请手动进行:

merge(
  merge(df1,df2,by="date",all=TRUE),
  df3, by.x='date', by.y='dates', all=TRUE)

对于Reduce,没有空间向每个集合附加其他参数。但是,经过一些重新包装,我们可以执行以下操作:

Reduce(function(x,y) {
    res <- merge(x$d, y$d, by.x=x$key, by.y=y$key, all=TRUE)
    list(key=x$key, d=res)
  }, 
  list(list(key='date', d=df1), list(key='date', d=df2), list(key='dates', d=df3))
)