如何在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 次浏览

启动你的职业生涯

完成课程获得认证

开始学习
广告