【问题标题】:How to exclude missing data in specific columns in R如何排除 R 中特定列中的缺失数据
【发布时间】:2018-04-25 13:24:19
【问题描述】:

我有一个 df 和 15,105 rows 和 127 columns。我想排除一些具有NA 的特定列的行。我正在使用以下命令:

wave1b <- na.omit(wave1, cols=c("Bx", "Deq", "Gef", "Has", "Pla", "Ty"))

但是,当我运行它时,它只返回 19 rows,而预期返回 14,561 rows(如果它应该只排除那些特定的 colunms 请求中的 NA)。我确认这一点,因为我在df 上做了一个子集,以测试丢失删除的准确性。

有人可以帮我解决这个问题吗?谢谢!

【问题讨论】:

  • 由于您可能希望返回整个data.frame,因此最好这样做:wave1[rowSums(is.na(wave1[,c("Bx", "Deq", "Gef", "Has", "Pla", "Ty")])) == 0, ]
  • na.omit 没有有参数cols。我刚刚尝试过,它什么也没做。您可能正在从所有列中删除所有 NA 值。
  • 是的。它正在从所有列中删除。

标签: r database na missing-data


【解决方案1】:

我认为这段代码效率不高,但它可以工作:

df <- data.frame(A = rep(NA,3), B = c(NA,2,3),C=c(1,NA,2))
df
   A  B  C
1 NA NA  1
2 NA  2 NA
3 NA  3  2

它只删除列 B 和 C 缺少值的行:

df[-which(is.na(df$B)|is.na(df$C)),]
   A B C
3 NA 3 2

【讨论】:

  • 您不需要which。你可以做!(is.na(df$B)|is.na(df$C)
  • 它有效,但正确的参数是 & 而不是 |所以它应该是这样的: df [ !(is.na(df$B) &!is.na(df$C), ]
【解决方案2】:

您可以使用complete.cases

> df[complete.cases(df[, -1]), ]
   A B C
3 NA 3 2

【讨论】:

    猜你喜欢
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-04
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    相关资源
    最近更新 更多