如何通过排除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