首先,我制作一个data.table。
set.seed(100)
a <- data.table(x = sample(c(1:1000),100000,replace = TRUE),
y = sample(letters,100000,replace = TRUE),
z = 1:100000)
我使用一种方法a[x >= 900 & y == 'b', .N]
,结果是389。
然后我使用另一种方法a[.(c(900:max(x)),'b'), .N, on = .(x,y)]
,结果是394。
我发现第二种方法可以使NA&#39;
a[.(c(900:max(x)),'b'), on = .(x,y)][is.na(z)]
WHY ??
答案 0 :(得分:3)
如果我们使用onSuccess
,则NA元素将消失
nomatch=0
原因是我们将序列从900变为'{'的a[.(c(900:max(x)),'b'), .N, on = .(x,y), nomatch = 0]
#[1] 389
值。所以缺少一些元素。例如
max
,当我们正在进行a[.(c(900:max(x)),'b'), on = .(x,y)][is.na(z)]
# x y z
#1: 948 b NA
#2: 958 b NA
#3: 975 b NA
#4: 984 b NA
#5: 986 b NA
加入时,会为{z'生成NA
个元素。
原因是组合缺少这些元素
left