【问题标题】:Remove rows with NAs from a dataframe which contains columns with ids从包含具有 id 的列的数据框中删除具有 NA 的行
【发布时间】:2017-11-02 12:22:18
【问题描述】:

来自如下数据框:

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

【问题讨论】:

  • 使用rowSums创建逻辑向量,即DF[rowSums(is.na(DF[-1])) &lt; 2,]

标签: r


【解决方案1】:
solution <- DF[!(rowSums(is.na(DF)) == NCOL(DF)-1),]

这应该适用于任意数量的列,假设始终有一个保证不包含任何 NA 的 ID 列。

输入:

> 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

【讨论】:

    【解决方案2】:

    您还可以组合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, ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-15
      • 2015-10-19
      • 2013-08-09
      • 2022-06-13
      • 1970-01-01
      • 2019-09-13
      • 1970-01-01
      • 2016-03-13
      相关资源
      最近更新 更多