gpt4 book ai didi

R data.table 在使用.I 获取行号时返回 NA

转载 作者:行者123 更新时间:2023-12-04 02:36:38 24 4
gpt4 key购买 nike

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 returns NA in the corresponding element of a logical, integer, numeric, complex or character result, and NULL for a list. (It returns 00 for a raw result.)

对比来自 ?data.table:

i

integer and logical vectors work the same way they do in [.data.frame except logical NAs are treated as FALSE.

关于R data.table 在使用.I 获取行号时返回 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61554066/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com