簡體   English   中英

R中na.rm和na.omit的區別

[英]The difference of na.rm and na.omit in R

我剛開始使用R而且我已經執行了這些語句:

library(datasets)
head(airquality)
s <- split(airquality,airquality$Month)
sapply(s, function(x) {colMeans(x[,c("Ozone", "Solar.R", "Wind")], na.rm = TRUE)})
lapply(s, function(x) {colMeans(na.omit(x[,c("Ozone", "Solar.R", "Wind")])) }) 

對於sapply ,它返回以下內容:

             5         6          7          8         9
Ozone    23.61538  29.44444  59.115385  59.961538  31.44828
Solar.R 181.29630 190.16667 216.483871 171.857143 167.43333
Wind     11.62258  10.26667   8.941935   8.793548  10.18000

對於lapply ,它返回以下內容:

$`5`
    Ozone   Solar.R      Wind 
 24.12500 182.04167  11.50417 

$`6`
    Ozone   Solar.R      Wind 
 29.44444 184.22222  12.17778 

$`7`
     Ozone    Solar.R       Wind 
 59.115385 216.423077   8.523077 

$`8`
    Ozone   Solar.R      Wind 
 60.00000 173.08696   8.86087 

$`9`
    Ozone   Solar.R      Wind 
 31.44828 168.20690  10.07586 

現在,我的問題是,為什么返回的值類似,但不一樣? 是不是na.rm = TRUEna.omit應該做同樣的事情? 省略缺失值並僅計算我們所擁有的值的平均值? 在這種情況下,我不應該在兩個結果集中都有相同的值嗎?

非常感謝你的任何輸入!

它們不應該給出相同的結果。 考慮這個例子:

exdf<-data.frame(a=c(1,NA,5),b=c(3,2,2))
#   a b
#1  1 3
#2 NA 2
#3  5 2
colMeans(exdf,na.rm=TRUE)
#       a        b 
#3.000000 2.333333
colMeans(na.omit(exdf))
#  a   b 
#3.0 2.5

為什么是這樣? 在第一種情況下,列b的平均值通過(3+2+2)/3 在第二種情況下,第二行被整體 (也值除去b這是不-NA,因此在第一種情況下考慮)由na.omit等等b平均僅有(3+2)/2

sapply(s, function(x) {colMeans(x[,c("Ozone", "Solar.R", "Wind")], na.rm = TRUE)})處理每一列,並計算平均值每列中的非NA值。

lapply(s, function(x) {colMeans(na.omit(x[,c("Ozone", "Solar.R", "Wind")])) })子集s到三列中沒有一列的情況是NA ,然后采用列方式得到結果數據。

差異來自那些具有一個或兩個值為NA

暫無
暫無

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

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