从包含带有ids的列的数据框中删除具有NA的行

时间:2017-11-02 12:22:19

标签: r

来自以下数据框:

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))

2 个答案:

答案 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, ]