如何在R資料框中排除NA值計算列均值?如果所有值都是NA,則輸出NA。


使用`na.rm`可以很容易地找到排除NA值的列均值,但是如果所有值都是NA,而我們想要輸出NA,那麼就不那麼直接了。因此,在這種情況下,我們可以使用`ifelse`函式,如果所有值都是NA,則返回NA作為輸出,如下例所示。

示例1

考慮下面的資料框:

 線上演示

x1<-sample(c(NA,2,3),20,replace=TRUE)
x2<-rep(NA,20)
df1<-data.frame(x1,x2)
df1

輸出

   x1   x2
1  2   NA
2  NA  NA
3  NA  NA
4  2   NA
5  2   NA
6  NA  NA
7  3   NA
8  NA  NA
9  2   NA
10 3   NA
11 2   NA
12 NA  NA
13 3   NA
14 2   NA
15 3   NA
16 NA  NA
17 2   NA
18 2   NA
19 2   NA
20 2   NA

查詢x1和x2列的均值,如果所有值都是NA,則返回NA;否則,獲取剩餘值的均值:

ifelse(all(is.na(df1$x1)),NA,mean(df1$x1,na.rm=T))

[1] 2.285714

ifelse(all(is.na(df1$x2)),NA,mean(df1$x2,na.rm=T))

[1] NA

示例2

 線上演示

y1<-sample(c(NA,rpois(1,5)),20,replace=TRUE)
y2<-rep(NA,20)
df2<-data.frame(y1,y2)
df2

輸出

   y1   y2
1  8   NA
2  NA  NA
3  NA  NA
4  NA  NA
5  NA  NA
6  NA  NA
7  8   NA
8  8   NA
9  NA  NA
10 NA  NA
11 8   NA
12 8   NA
13 8   NA
14 8   NA
15 NA  NA
16 NA  NA
17 NA  NA
18 8   NA
19 NA  NA
20 NA  NA

查詢y1和y2列的均值,如果所有值都是NA,則返回NA;否則,獲取剩餘值的均值:

ifelse(all(is.na(df2$y1)),NA,mean(df2$y1,na.rm=T))

[1] 8

ifelse(all(is.na(df2$y2)),NA,mean(df2$y2,na.rm=T))

[1] NA

更新於:2021年3月6日

775 次瀏覽

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.