为什么我在data.table中使用'on'可以使“NA”
问题描述:
首先,我创建一个data.table。为什么我在data.table中使用'on'可以使“NA”
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”
a[.(c(900:max(x)),'b'), on = .(x,y)][is.na(z)]
WHY ??
答
如果我们使用nomatch=0
,该NA元素将会消失
a[.(c(900:max(x)),'b'), .N, on = .(x,y), nomatch = 0]
#[1] 389
的原因是,我们正在采取的顺序从900到的“X”的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
这将导致NA
元素“Z”,就像我们正在做一个left
加入。
其原因是,这些元素缺少该组合
c(948, 958, 975, 984, 986) %in% a[x > 900 & y == "b"][, sort(unique(x))]
#[1] FALSE FALSE FALSE FALSE FALSE
@ Gauss.Y当然,我更新后 – akrun
是,'一[X == 948,唯一的(Y)]',” b“不在结果中。谢谢! –