按多列合并两个数据帧而不丢失数据

Merging two dataframes by multiple columns without losing data

我是 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 中添加年份和 val2 的条目,同时将 val1 和 val3 保留为 NA。

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

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

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

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

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