来自以下数据框:
DF <- data.frame(ids = c(1, 2, 3), y = c(0, 10, NA), z=c(NA, 33, 22))
可以使用以下方法删除包含NA的行:
completeFun <- function(data, desiredCols) {
completeVec <- complete.cases(data[, desiredCols])
return(data[completeVec, ])
}
completeFun(DF, "y")
# x y z
# 1 1 0 NA
# 2 2 10 33
completeFun(DF, c("y", "z"))
如何删除包含所有单元格NA的行,而不删除包含一个NA的每一行。
输入示例:
DF <- data.frame(ids = c(1, 2, 3,4), y = c(0, 10, NA,NA), z=c(NA, 33, 22,NA))
预期产出的例子:
DF <- data.frame(ids = c(1, 2, 3), y = c(0, 10, NA), z=c(NA, 33, 22))
答案 0 :(得分:3)
solution <- DF[!(rowSums(is.na(DF)) == NCOL(DF)-1),]
这应适用于任意数量的列,假设始终有一个ID列,保证不包含任何NA。
输入:
> DF
ids y z
1 1 0 NA
2 2 10 33
3 3 NA 22
4 4 NA NA
输出:
> solution
ids y z
1 1 0 NA
2 2 10 33
3 3 NA 22
答案 1 :(得分:3)
您还可以合并all()
和is.na()
。尝试
all.na <- apply(DF[-1], 1, function(x) all(is.na(x))) # DF[-1] doesn't select column "ids"
DF[!all.na, ]