按多列合并两个数据帧而不丢失数据
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)
我是 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)