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

lil*_*laf 6 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))
Run Code Online (Sandbox Code Playgroud)

Dav*_*urg 4

如果您想要检查 的每个组合id1以及id2是否有任何值是NAs,然后删除整个组合,您可以为每个组插入一条语句,并且仅在该语句返回 时才if检索结果(使用) 。.SDTRUE

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
Run Code Online (Sandbox Code Playgroud)

或者类似地,

dat[, if(all(!is.na(value))) .SD, by = .(id1, id2)]
Run Code Online (Sandbox Code Playgroud)