在同时使用na.omit和complete.cases之后仍然显示NAs

问题描述 投票:1回答:2

我是一名使用R的研究生,已经阅读了其他有关从数据帧中删除包含NA的行的Stack Overflow答案。我已经尝试了na.omit和complete.cases。当两者都使用时,它表明带有NA的行已被删除,但是当我编写summary(data.frame)时,它仍然包含NA。带有NA的行实际上已删除还是我做错了?

na.omit(Perios)
summary(Perios)

Perios[complete.cases(Perios),]
summary(Perios)
r summary na
2个回答
2
投票
    错误是您实际上没有分配na.omit的输出!
  1. Perios <- na.omit(Perios)
  2. 如果您知道NA出现在哪一列,那么您可以这样做

  3. Perios[!is.na(Perios$Periostitis),]

或更笼统地说:

Perios[!is.na(Perios$colA) & !is.na(Perios$colD) & ... ,]

然后作为R的一般安全提示,输入na.fail断言其有效:

na.fail(Perios)  # trust, but verify! Die Paranoia ist gesund.

1
投票
即,您希望没有NA值的所有行。

< x <- data.frame(a=c(1,2,NA), b=c(3,NA,NA)) > x a b 1 1 3 2 2 NA 3 NA NA > x[complete.cases(x),] a b 1 1 3 > na.omit(x) a b 1 1 3

然后将其分配回x以保存数据。

complete.cases返回向量,输入数据帧的每一行一个元素。另一方面,is.na返回一个矩阵。这不适用于返回完整案例,但可以将所有非NA值作为向量返回:

> is.na(x) a b [1,] FALSE FALSE [2,] FALSE TRUE [3,] TRUE TRUE > x[!is.na(x)] [1] 1 2 3

© www.soinside.com 2019 - 2024. All rights reserved.