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 NA
s:
NA != 4
[1] NA
在第二种情况下你这样做:
!NA %in% 4
[1] TRUE
我在 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 NA
s:
NA != 4
[1] NA
在第二种情况下你这样做:
!NA %in% 4
[1] TRUE