从包含id列的数据框中删除含有NAs的行。

3

一个类似下面的数据框:

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
使用 rowSums 函数创建逻辑向量,即 DF[rowSums(is.na(DF[-1])) < 2,] - akrun
2个回答

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接