我有一个很大的数据集,需要过滤。我想删除所有满足以下条件的行,并且该子集中有717,329行。总共有16,198,723行,因此应得到16,198,723-717,329 = 15,481,394的数据集
# Rows to be removed
dt[Agency == "A" & cntra_mp_id == "C" & cmsn_trd == "N", .N ]
[1] 717329
问题是实际上没有子集的数据集要小得多。我想以某种方式未正确应用非操作员,对吗?这是什么问题。
# Data.table without the rows
dt[!(Agency == "A" & cntra_mp_id == "C" & cmsn_trd == "N"), .N ]
[1] 15127505
答案 0 :(得分:1)
可能的原因可能是您的列包含NA
值。在这种情况下,表达式!(Agency == "A" & cntra_mp_id == "C" & cmsn_trd == "N")
的计算结果为NA
,但仅计算返回TRUE
的表达式。
一个(有点难看)的修复程序
dt[
!(Agency == "A" & cntra_mp_id == "C" & cmsn_trd == "N") |
is.na(Agency) | is.na(cntra_mp_id) | is.na(cmsn_trd),
.N
]