根据几列的值从 R 中的 data.table 中删除行



我在R中有一个data.table,它有几个id和一个值。对于每个 id 组合,都有几行。如果其中一行在"value"列中包含 NA,我想删除具有此 id 组合的所有行。例如,在下表中,我想删除所有id1 == 2id2 == 1的行。

如果我只有一个id,我会做dat[!(id1 %in% dat[is.na(value),id1])]。在示例中,这将删除 i1 == 2 的所有行。但是,我没有设法包含几列。

dat <- data.table(id1 = c(1,1,2,2,2,2),
                  id2 = c(1,2,1,2,3,1),
                  value = c(5,3,NA,6,7,3))

如果要检查每个id1id2的组合是否有任何值NA s,然后删除整个组合,则可以为每个组插入一个if语句,并且仅在该语句返回TRUE时才检索结果(使用 .SD )。

dat[, if(!anyNA(value)) .SD, by = .(id1, id2)]
#    id1 id2 value
# 1:   1   1     5
# 2:   1   2     3
# 3:   2   2     6
# 4:   2   3     7

或者类似地,

dat[, if(all(!is.na(value))) .SD, by = .(id1, id2)]

最新更新