r data.table 排除列中具有特定值的行也会删除 NA

r data.table excluding rows with certain value in a column removes NAs too

我在 data.table 中遇到了这种意外行为。当排除具有特定值的行时,特定列中具有 NAs 的行将被删除,如本例所示:

library(data.table)

dt_mtcars <- setDT(copy(mtcars))

set.seed(42)
na_rows <- runif(3, min = 1, max = nrow(mtcars))

dt_mtcars[ na_rows, cyl := NA]

dt_mtcars[ is.na(cyl), .N]
#> [1] 3

dt_mtcars <- dt_mtcars[ cyl != 4]

dt_mtcars[ is.na(cyl), .N]
#> [1] 0

reprex package (v2.0.1)

于 2022-01-27 创建

排除行而不是像

library(data.table)

dt_mtcars <- setDT(copy(mtcars))

set.seed(42)
na_rows <- runif(3, min = 1, max = nrow(mtcars))

dt_mtcars[ na_rows, cyl := NA]

dt_mtcars[ is.na(cyl), .N]
#> [1] 3

dt_mtcars <- dt_mtcars[ !cyl %in% 4]

dt_mtcars[ is.na(cyl), .N]
#> [1] 3

reprex package (v2.0.1)

于 2022-01-27 创建

确实有预期的结果。我在上面的第一个例子中期待同样的结果是错误的吗?或者这是 data.table 中的错误?

这不是 data.table 问题。

在第一种情况下你没有 select NAs:

NA != 4
[1] NA

在第二种情况下你这样做:

!NA %in% 4
[1] TRUE