【发布时间】:2022-01-27 12:46:28
【问题描述】:
我在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 创建于 2022-01-27 (v2.0.1)
排除行而不是像
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 中的错误?
【问题讨论】:
标签: r data.table operators logical-operators