如何在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
广告