我仍然对 data.table J 的行为感到困惑。
> DT = data.table(A=7:3,B=letters[5:1])
> DT
A B
1: 7 e
2: 6 d
3: 5 c
4: 4 b
5: 3 a
> setkey(DT, A, B)
> DT[J(7,"e")]
A B
1: 7 e
> DT[J(7,"f")]
A B
1: 7 f # <- there is no such line in DT
但是DT中没有这样的行。为什么我们会得到这个结果?
最佳答案
数据表J(7, 'f')
字面上是单行 data.table
你加入自己的data.table
和。当您调用 x[i]
,您正在查看 i
中的每一行并在 x
中找到所有匹配项.默认是给 NA
i
中的行不匹配任何内容,通过向 DT
添加另一列更容易看到:
DT <- data.table(A=7:3,B=letters[5:1],C=letters[1:5])
setkey(DT, A, B)
DT[J(7,"f")]
# A B C
# 1: 7 f NA
您看到的是
J
中的唯一一行与 DT
中的任何内容都不匹配.防止data.table
从报告不匹配,您可以使用 nomatch=0
DT[J(7,"f"), nomatch=0]
# Empty data.table (0 rows) of 3 cols: A,B,C
关于R data.table J 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23754552/