比较两个表并根据条件添加行

时间:2015-07-30 02:25:55

标签: r join merge

我想将 dt1 dt2 进行比较,以便 dt1 < / em> dt2 相比时存在列值 列值不会添加行或更改该行中的值。因此,当值不同时,例如 dt2 具有“4”&amp; A列中的“5”将添加“4”&amp; “5”到 dt1 表,但它不会替换 dt1 中的“1”,“2”或“3”值一个专栏,因为它已经存在。

编辑:我想使用主键形式的A列来检查两个表中A列中是否存在“1”的行,然后没有任何变化,但是如果有A列值在 dt2 (例如:“4”)但不在 dt1 中,然后我要将该行数据合并与dt1表

dt1 
A   B   C   
1   4   7   
2   5   8   
3   6   9   

dt2
A   B   C  
1   10  13  
2   12  15  
3   11  14  
4   1   20
5   12  3

dt1
A   B   C   
1   4   7   
2   5   8   
3   6   9    
4   1   20
5   12  3

2 个答案:

答案 0 :(得分:3)

您只需使用一个条件语句就可以dt1 dt2Adt1个值的行绑定

rbind(dt1, dt2[!(dt2$A %in% dt1$A),])
#   A  B  C
# 1 1  4  7
# 2 2  5  8
# 3 3  6  9
# 4 4  1 20
# 5 5 12  3

答案 1 :(得分:2)

或者使用dplyr,我们会获得&#39; dt2&#39;中的行。那些不在&#39; dt1&#39;按&#39; A&#39;分组使用anti_joinrbind使用&#39; dt1&#39;使用bind_rows

 library(dplyr)
 anti_join(dt2, dt1, by='A') %>% 
                       bind_rows(dt1, .)

或者另一种选择是使用rbindlist来绑定两个数据集,并根据&#39; A&#39;来获取unique。列。

 library(data.table)
 unique(rbindlist(list(dt1, dt2)), by='A')

或者@Arun在评论中提到,如果我们使用devel版本的&#39; data.table&#39;即v1.9.5(安装devel版本的说明为here),on选项可用于连接两个数据集,而无需指定用于获取&#39; dt2&#39;中的行的键。那些不在&#39; dt1&#39;和rbind使用&#39; dt1&#39;

  rbind(dt1, dt2[!dt1, on="A"])