【发布时间】:2013-10-11 19:16:57
【问题描述】:
我正在尝试连接两个数据表。第一个(下面称为“左”)有一组键(“k”列)。第二个('right')具有一组相似的键以及每个键的值。我想就地更新“左”数据,使其具有来自“右”的值。但如果它不存在,则应填充默认值而不是 NA。
我创建了一个函数“default”,它将用默认值替换 NA。
default <- function(value, default) {
value[is.na(value)] <- default
return(value)
}
我不明白为什么以下不起作用。
left <- data.table(k=c(1,2,3,4,NA), key="k")
right <- data.table(k=c(1,2), value=c("a","b"), key="k")
left[right, value := default(value,"none")]
实际结果...
> left
k value
1: NA NA
2: 1 a
3: 2 b
4: 3 NA
5: 4 NA
预期结果...
k value
1: NA none
2: 1 a
3: 2 b
4: 3 none
5: 4 none
感谢您的帮助。
【问题讨论】:
-
看看
left[right],这应该会让你明白为什么你的方法不起作用 -
我会做
right[left][is.na(value), value := "none"]
标签: r data.table