簡體   English   中英

在 aggregate() 中使用 na.rm=True 和 na.action=na.pass - 區別?

[英]Use of na.rm=True and na.action=na.pass in aggregate() - difference?

我在 Stack Overflow 上找不到已經回答了我的問題的問題,所以很抱歉,如果已經有人問過這個問題而我只是找不到它。

總而言之,這個問題更多是關於根據我使用的代碼了解我的數據會發生什么。

所以,我有一個數據集,里面有幾個 NA。

我想匯總數據並使用na.rm=True告訴 R 在計算時忽略 NA,對嗎? 我收到的 output 包括 NA,這導致我使用 function na.action=na.passna.rm=True 這讓我的 output 中的 NA 明顯減少。 老實說,我不明白為什么...

因為我喜歡自己嘗試並找出答案,所以我查看了我的聚合 function 的不同變體:

  1. 只有na.rm=True
  2. 只有na.action=na.pass
  3. na.rm=Truena.action=na.pass

只使用 2。我得到了很多 NA,這是有道理的,因為我告訴 R 將所有 NA 包括在計算中,而沒有na.rm=True 同時 1. 和 3. 不要給我相同的結果。 這是為什么?

我認為這兩個na.rm=Truena.action=na.pass意味着同樣的事情......顯然他們沒有,因為我的變量平均值略有不同。

與僅使用na.rm=True相比,當我在聚合 function 中同時使用 na.rm=True 和na.action=na.pass時,我的數據會發生什么。 哪個更好用?

非常感謝,感謝您的幫助!

讓我們舉一個簡單的例子來理解這一點:

df <- data.frame(a = c(2, 2, 1, 3, NA, NA), b = c(1, 1, 1, 2, 2, 3))
df
#   a b
#1  2 1
#2  2 1
#3  1 1
#4  3 2
#5 NA 2
#6 NA 3
  • aggregatesum一起使用。
aggregate(a~b, df, sum)

#  b a
#1 1 5
#2 2 3

請注意,output 中沒有b = 3行。 b = 2也有 1 個NA值,但我們返回 output 的 3 而沒有添加na.rm = TRUE 這意味着默認情況下,計算時會刪除所有NA值。

  • 使用na.action = 'na.pass'
aggregate(a~b, df, sum, na.action = 'na.pass')

#  b  a
#1 1  5
#2 2 NA
#3 3 NA

通過指定na.action = na.pass ,我們要求它包含所有NA值。 因此,我們現在有一行b = 3b = 2NA因為我們沒有包括na.rm = TRUE

  • 使用na.rm = TRUE
aggregate(a~b, df, sum, na.rm = TRUE, na.action = 'na.pass')

#  b a
#1 1 5
#2 2 3
#3 3 0

我認為 output 應該是不言自明的。

暫無
暫無

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

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