簡體   English   中英

使用 na.omit 和 complete.cases 后,摘要仍然顯示 NA

[英]summary still shows NAs after using both na.omit and complete.cases

我是一名使用 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)
  1. 錯誤是您實際上沒有從na.omit分配輸出!

    Perios <- na.omit(Perios)

  2. 如果你知道 NAs 出現在哪一列,那么你可以做

    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.

is.na不是正確的功能。 你想要complete.cases並且你想要complete.cases這相當於function(x) apply(is.na(x), 1, all)na.omit來過濾數據:

也就是說,您需要沒有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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM