R data.table J 行为

标签 r data.table

我仍然对 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/

相关文章:

r - 根据字符串的第一个字母对 R 中的类别进行分组?

r - 在 mgcv 中结合线性和随机效应 smooth 进行绘图

r - 为什么 dcast 不接受 x[length(x)]?

r - data.table .. 用 j 中的函数表示法

r - 如何比较两个数据帧/表并在R中提取数据?

r - 更新 R shiny 中 ActionButton 单击事件的 Plot 输出

r - 在 macOS 的 conda 环境下使用 R 包

r - 基于 data.table R 中的列的条件滚动差异或梯度

r - 如果每列分别满足条件,则将值设置为零

r - 将 R 版本从 3.2.2 升级到 3.3.3