Sha*_*ang 2 merge replace r dataframe data.table
我有以下两个 data.tables
library(data.table)
dt1 = data.table(index_column = c(12, 17, 29, 34, 46), column1 = c("dog", "cat", "bird", "elephant", "bird"), column2 = c(482, 391, 567, 182, 121))
dt2 = data.table(index_column = c(17, 29, 46), column1 = c("cat", "penguin", "bird"))
> dt1
index_column column1 column2
1: 12 dog 482
2: 17 cat 391
3: 29 bird 567
4: 34 elephant 182
5: 46 bird 121
> dt2
index_column column1
1: 17 cat
2: 29 penguin
3: 46 bird
Run Code Online (Sandbox Code Playgroud)
将这两个 data.table 合并后仅与index_column共享
merged = merge(dt1, dt2, by="index_column", all=TRUE)
Run Code Online (Sandbox Code Playgroud)
结果data.table是:
index_column column1.x column2 column1.y
1: 12 dog 482 NA
2: 17 cat 391 cat
3: 29 bird 567 penguin
4: 34 elephant 182 NA
5: 46 bird 121 bird
Run Code Online (Sandbox Code Playgroud)
我有兴趣用 的值替换 的值(column1.x如果column1.y它们不是 )NA。大多数值是相同的,但那些不同的值(例如鸟/企鹅)应该被替换。
可以通过 if 语句来做到这一点,例如
if ((merged$column1.x != merged$column1.y) & !is.na(merged$column1.y)){
merged$column1.x = merged$column1.y
}
merged$column1.y = NULL
Run Code Online (Sandbox Code Playgroud)
我担心这不是一个很好的data.table解决方案。data.table如果有数百万行,它的扩展性就不会很好。
如何根据 R data.table 中的另一列有条件地替换一列的值?简单地用另一个替换一个而忽略 NA 是否更有效?
我们可以使用on基于方法
dt1[dt2, column1 := i.column1, on = .(index_column)]
dt1
# index_column column1 column2
#1: 12 dog 482
#2: 17 cat 391
#3: 29 penguin 567
#4: 34 elephant 182
#5: 46 bird 121
Run Code Online (Sandbox Code Playgroud)