如何删除行中缺少4个值的4行

时间:2014-10-18 13:46:46

标签: r na

我正在尝试删除一行中包含4到5个缺失值的行。我已经尝试过我在这里找到的代码,但还没有成功。

数据集(dt)的例子是:

id a b  c  d  e
1 10 NA NA 9  8
2 NA 7  7  NA NA
3 10 NA NA NA NA

期望的输出:

id a b  c  d  e
1 10 NA NA 9  8
2 NA 7  7  NA NA

我使用了这段代码dt[!apply(dt, 1, function(i) all(1:5 %in% which(is.na(i)))),],但没有成功。

任何建议都表示赞赏。

1 个答案:

答案 0 :(得分:3)

在这里,我没有选择第一列,即id,因为在帖子中提到了4个从5个缺失。 dt中的列数为6.因此,我猜不会使用第一列iddt[,-1]选择除id以外的所有其他列。

 dt[rowSums(is.na(dt[,-1]))!=4,]
 #  id  a  b  c  d  e
 #1  1 10 NA NA  9  8
 #2  2 NA  7  7 NA NA

如果您使用的是apply,则可以使用

dt[apply(dt[,-1], 1, function(i) sum(is.na(i))!=4),]

假设您要删除>=4个NAs的行,(来自@Taras B的评论)

 dt[rowSums(is.na(dt[,-1])) <4,]

数据

dt <- structure(list(id = 1:3, a = c(10L, NA, 10L), b = c(NA, 7L, NA
), c = c(NA, 7L, NA), d = c(9L, NA, NA), e = c(8L, NA, NA)), .Names = c("id", 
"a", "b", "c", "d", "e"), class = "data.frame", row.names = c(NA, 
-3L))