根据几列的值从 R 中的 data.table 中删除行
Remove rows from data.table in R based on values of several columns
我在 R 中有一个 data.table,它有几个 ID 和一个值。对于每个 ID 组合,都有几行。如果这些行之一在 'value' 列中包含 NA,我想删除具有此 ID 组合的所有行。例如,在下面的 table 中,我想删除 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))
如果您想检查 id1
和 id2
的每个组合是否有任何值是 NA
,然后删除整个组合,您可以插入一个 if
每个组的语句,并且仅在该语句 returns 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)]
我在 R 中有一个 data.table,它有几个 ID 和一个值。对于每个 ID 组合,都有几行。如果这些行之一在 'value' 列中包含 NA,我想删除具有此 ID 组合的所有行。例如,在下面的 table 中,我想删除 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))
如果您想检查 id1
和 id2
的每个组合是否有任何值是 NA
,然后删除整个组合,您可以插入一个 if
每个组的语句,并且仅在该语句 returns 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)]