首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过多列合并两个数据而不丢失数据

通过多列合并两个数据而不丢失数据
EN

Stack Overflow用户
提问于 2021-10-08 13:35:47
回答 2查看 948关注 0票数 0

我是新的R和有两个非常大的数据集,我想合并。它们看上去如下

代码语言:javascript
复制
      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

第二个数据文件如下所示

代码语言:javascript
复制
      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

我希望最终的合并集如下所示

代码语言:javascript
复制
      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和年份合并

代码语言:javascript
复制
 total <- merge(df1,df2,by=c("id","year"))

但是,只有ID和年份匹配时,才会导致合并。我希望发生这种情况,以便如果ID匹配但年份不匹配,新行将为val2和年份添加相同的ID,同时保留val1和val3作为NA。

然后,我尝试只按ID合并,然后删除行(如果是yal.x != yy.y),但是由于数据集太大,所以效率不高。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-10-08 13:39:20

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

代码语言:javascript
复制
 total <- merge(df1,df2,by=c("id","year"), all=TRUE)
票数 1
EN

Stack Overflow用户

发布于 2021-10-08 13:37:58

必须指定all.x=TRUE和all.y=TRUE,这样才能保留两个数据集中的所有唯一行。

代码语言:javascript
复制
 total <- merge(df1,df2,by=c("id","year"),all.x=TRUE,all.y=TRUE)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69496732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档