我想将 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
答案 0 :(得分:3)
您只需使用一个条件语句就可以dt1
dt2
中A
个dt1
个值的行绑定
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_join
和rbind
使用&#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"])