作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
library(data.table)
dt <- data.table(A=c(NA,3,5,0,1,2),B=c("foo","foo","foo","bar","bar","bar"))
dt
#> A B
#> 1: NA foo
#> 2: 3 foo
#> 3: 5 foo
#> 4: 0 bar
#> 5: 1 bar
#> 6: 2 bar
#simple filter
dt[,.I[A>1]]
#> [1] NA 2 3 6
dt[A>1,which=TRUE]
#> [1] 2 3 6
我原以为这两个应该返回相同的结果。
最佳答案
前一种情况使用base
R 逻辑进行子集化;后一种情况使用 data.table
的子集逻辑略有不同。
data.table
从过滤中排除 NA
:
dt[A > 1]
# A B
# 1: 3 foo
# 2: 5 foo
# 3: 2 bar
# compare to base logic:
setDF(dt)
dt[dt$A > 1, ]
# A B
# NA NA <NA>
# 2 3 foo
# 3 5 foo
# 6 2 bar
setDT(dt)
您可以通过在第一条语句中添加一些诊断信息来更深入地了解这一点:
dt[, {
idx = A > 1
print(idx)
print(seq_len(.N)[idx])
.I[A>1]
}]
# [1] NA TRUE TRUE FALSE FALSE TRUE
# [1] NA 2 3 6
# [1] NA 2 3 6
base
逻辑是 NA
表示“未知”,因此是否保留或删除 NA
索引处的元素也是未知的,因此输出必须是 NA
。来自 ?"["
:
NAs in indexing
When extracting, a numerical, logical or character
NA
index picks an unknown element and so returnsNA
in the corresponding element of a logical, integer, numeric, complex or character result, andNULL
for a list. (It returns00
for a raw result.)
对比来自 ?data.table
:
i
integer and logical vectors work the same way they do in
[.data.frame
except logicalNA
s are treated asFALSE
.
关于R data.table 在使用.I 获取行号时返回 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61554066/
我是一名优秀的程序员,十分优秀!