在计算聚合平均值时,我遇到了处理NAs的问题。请看下面的代码:
tab=data.frame(a=c(1:3,1:3), b=c(1,2,NA,3,NA,NA))
tab
a b
1 1 1
2 2 2
3 3 NA
4 1 3
5 2 NA
6 3 NA
attach(tab)
aggregate(b, by=list(a), data=tab, FUN=mean, na.rm=TRUE)
Group.1 x
1 1 2
2 2 2
3 3 NaN
如果向量中所有值都是NA,则我希望输出为NA,而不是NaN。
Group.1 x
1 1 2
2 2 2
3 3 NA
我尝试使用自定义函数:
adjmean=function(x) {if(all(is.na(x))) NA else mean(x,na.rm=TRUE)}
然而,我遇到了以下错误:
aggregate(b, by=list(a), data=tab, FUN=adjmean)
Error in FUN(X[[1L]], ...) :
unused argument (data = list(a = c(1, 2, 3, 1, 2, 3), b = c(1, 2, NA, 3, NA, NA)))
简而言之,如果列中全部为NAs,则输出NA而不是NaN。如果只有少量NAs,则应该在忽略NAs的情况下计算平均值。
任何帮助都将不胜感激。
谢谢。
attach
有什么原因吗?或者是将它与data = tab
结合使用? - David Arenburgaggregate
的公式方法和基本方法。默认(非公式)方法没有data
参数,因此需要使用attach
、with
或$
。 - A5C1D2H2I1M1N2O1R2T1