删除子集产生的行数与预期的不同

时间:2018-12-14 10:23:13

标签: r data.table

我有一个很大的数据集,需要过滤。我想删除所有满足以下条件的行,并且该子集中有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

1 个答案:

答案 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 ]