【问题标题】:Merge 3 dataframes which are different to each other合并 3 个彼此不同的数据帧
【发布时间】:2019-08-16 10:05:22
【问题描述】:

我想合并 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))

注意,每个数据框中的列名可以不同。第二个数据框可以在右侧合并,因为列完全不同,但第三个数据框如何合并,因为键不同,列可以有匹配的,其他不匹配的。结果我确实想要一张桌子。

【问题讨论】:

  • 您可以编辑您的帖子以显示给定示例的预期输出吗?
  • df3 的列名为 dates,而不是 date。这就是错误消息告诉您的内容:您没有要合并的列
  • @denis 应该是日期

标签: r dataframe merge


【解决方案1】:

如果你严格只需要合并3个data.frames,那就手动吧:

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))
)

【讨论】:

  • df3 数据框列是日期,而不是日期。抱歉输入错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-29
  • 2015-03-12
  • 2019-02-27
  • 1970-01-01
  • 1970-01-01
  • 2012-12-15
相关资源
最近更新 更多