我有以下兩種data.tables如何有條件地替換合併後的R data.table列?
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
在合併這兩個單獨的共享index_column
data.table與
merged = merge(dt1, dt2, by="index_column", all=TRUE)
所得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
我我有興趣將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
我的問題是,這不是一個非常data.table
解決方案。如果data.table
有數百萬行,它將不會很好地擴展。
如何根據R data.table中的另一列有條件地替換一列的值?簡單地用一個替換另一個,忽略NA的效率更高嗎?
像'DT [is.na(column1.y),column1.x:!= column1.y]'? – SymbolixAU