【问题标题】:Merging two dataframes by multiple columns without losing data [duplicate]通过多列合并两个数据框而不丢失数据[重复]
【发布时间】:2021-11-28 11:09:01
【问题描述】:

我是 R 新手,有两个非常大的数据集要合并。它们如下所示

      ID     year   val1  val3
 1     1     2001      2   34 
 2     2     2004      1   25
 3     3     2003      3   36
 4     4     2003      2   46
 5     5     1999      1   55
 6     6     2005      3   44

第二个dataframe如下

      ID     year   val2 
 1     1     2001      2
 2     2     2004      1
 3     3     2003      3
 4     4     2002      5
 5     5     1998      4
 6     6     2004      6

我希望最终的合并集看起来像这样

      ID     year   val1  val3 val2
 1     1     2001      2   34     2
 2     2     2004      1   25     1
 3     3     2003      3   36     3
 4     4     2002     NA   NA     5
 5     4     2003      2   46    NA
 6     5     1998     NA   NA     4
 7     5     1999      1   55    NA
 8     6     2004     NA   NA     6
 9     6     2005      3   44    NA

我尝试使用以下方法按 ID 和年份合并

 total <- merge(df1,df2,by=c("id","year"))

但这只会在 ID 和年份都匹配时才会合并。我希望它发生,以便如果 ID 匹配但年份不匹配,则新行将在相同的 ID 中添加 year 和 val2 的条目,同时将 val1 和 val3 保留为 NA。

然后我尝试仅按 ID 合并,然后如果 year.x != year.y 则删除行,但由于数据集太大,效率不高。

【问题讨论】:

  • 检查 ?merge 并阅读 all 参数
  • all 完美运行。

标签: r dataframe merge


【解决方案1】:

merge 有一个参数 all 指定是否要保留左侧和右侧的所有行(即 x 的所有行和 y 的所有行)

 total <- merge(df1,df2,by=c("id","year"), all=TRUE)

【讨论】:

    【解决方案2】:

    您必须指定 all.x=TRUE 和 all.y=TRUE,以便保留两个数据集中的所有唯一行

     total <- merge(df1,df2,by=c("id","year"),all.x=TRUE,all.y=TRUE)
    

    【讨论】:

    • 为什么不使用all 参数?
    • 我同意你的看法
    猜你喜欢
    • 2017-09-08
    • 2017-11-26
    • 1970-01-01
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    相关资源
    最近更新 更多