R 在data.table';中不匹配:';没有正确更新
我在R3.1.2平台上使用表1.9.4中的数据:x86_64-pc-linux-gnu(64位)。“:=”功能中的nomatch参数似乎不起作用。下面是示例代码R 在data.table';中不匹配:';没有正确更新,r,data.table,R,Data.table,我在R3.1.2平台上使用表1.9.4中的数据:x86_64-pc-linux-gnu(64位)。“:=”功能中的nomatch参数似乎不起作用。下面是示例代码 library(data.table) options(datatable.nomatch=0) dt1 = data.table( a=c(rep(1, 2), rep(2, 2), 3), b=c(1:2, 1:2,1), c=101:105) setkey(dt1, a, b) dt
library(data.table)
options(datatable.nomatch=0)
dt1 = data.table(
a=c(rep(1, 2), rep(2, 2), 3),
b=c(1:2, 1:2,1),
c=101:105)
setkey(dt1, a, b)
dt1
dtw = data.table(a=c(1,3), w1=c(201, 203), w2=c(301,303))
setkey(dtw, a)
dtw
dt1[dtw, ':='(w1=i.w1, w2=i.w2)]
dt1
它返回w1和w2列中的NA,而不是0
a b c w1 w2
1: 1 1 101 201 301
2: 1 2 102 201 301
3: 2 1 103 NA NA
4: 2 2 104 NA NA
5: 3 1 105 203 303
正确的输出应该是
a b c w1 w2
1: 1 1 101 201 301
2: 1 2 102 201 301
3: 2 1 103 0 0
4: 2 2 104 0 0
5: 3 1 105 203 303
我做错了什么?我如何得到0来代替NA?如评论中所述,您当前被误解的
nomatch
行为,nomatch=0
没有填充0
不确定nomatch是否会影响
:=
。它用于不带的联接:=
以指示它应该是内部联接还是外部联接。请注意,nomatch的行为可能会在2.0.0中发生变化,这是一个相当遥远的未来,因为从现在起它将是4个稳定的版本。
作为参考,离开当前关于该更改的讨论。“当'i'中的一行与'x'的键不匹配时,
nomatch
起作用。在dt1[dtw]
-作为x[i]
-的情况下,dtw
('i')中的所有键都在dt1
('x')中。因此,nomatch
甚至都没有效果。另外,nomatch=0
并不意味着返回0,它意味着“对于‘i’的那一行,不会返回任何行。”试试dtw[dt1,nomatch=NA]
与dtw[dt1,nomatch=0]
相比,尽管thela是对的,但这仍然是一个很好的问题,我同意nomatch=0
可能会产生误导。很好的问题,很好的例子。@TheLate Mail:对不起,我不在,所以不能回来了。dtw(“i”)只有2个键(1,3),而dt1(“x”)有3个键(1,2,3)。我想要的是为dtw中相应的键更新dt1中的行,如果dtw中没有相应的dt1键,则返回0作为列值。