【发布时间】:2015-01-17 17:42:47
【问题描述】:
我在 R 中有一个 data.table,它有几个 id 和一个值。对于每个 id 组合,有几行。如果这些行之一在“值”列中包含 NA,我想删除所有具有这种 id 组合的行。例如,在下表中,我想删除 id1 == 2 和 id2 == 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))
【问题讨论】:
-
试试
dat[!(id1==2 & id2==1)]或setkey(dat, id1, id2)[!J(2,1) ] -
我知道这可以在上面的简单示例中使用。但是,这个问题更笼统,因为可能有大量的行带有 NA。
-
我想他在找
dat[, if(all(!is.na(value))) .SD, .(id1, id2)] -
@DavidArenburg:这就是我想要的,谢谢!
-
@akrun 不管怎样,谢谢你的回答,下次我会尽量说清楚。
标签: r data.table