如何在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
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP