如何通过排除NA来查找列均值,如果所有值均为NA,则如何在R数据帧中输出NA?

通过使用na,rm可以很容易地找到排除NA的均值,但是如果我们想让NA如果所有值都是NA的话,那将不是那么简单的事情。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。. 因此,在这种情况下,如果所有值均为NA,则可以使用ifelse函数并将输出作为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(全部(is.na(df1 $x1)),不适用,平均值(df1 $x1,na.rm = T))

[1] 2.285714

ifelse(全部(is.na(df1 $x2)),NA,平均值(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,平均值(df2 $y1,na.rm = T))

[1] 8

ifelse(all(is.na(df2 $y2)),NA,平均值(df2 $y2,na.rm = T))

[1] NA