我正在尝试删除一行中包含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)))),]
,但没有成功。
任何建议都表示赞赏。
答案 0 :(得分:3)
在这里,我没有选择第一列,即id
,因为在帖子中提到了4个从5个缺失。 dt
中的列数为6.因此,我猜不会使用第一列id
。 dt[,-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))