gpt4 book ai didi

r - 在 R 中聚合 NA

转载 作者:行者123 更新时间:2023-12-01 23:10:03 26 4
gpt4 key购买 nike

我在计算聚合均值时无法处理 NA。请看以下代码:

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)))

简而言之,如果该列具有所有 NA,我希望 NA 作为输出而不是 NaN。如果它的 NA 很少,那么它应该计算忽略 NA 的均值。

任何帮助,将不胜感激。

谢谢

最佳答案

这与您拥有的非常接近,但取代了 mean(x, na.rm=TRUE)使用自定义函数计算非 NA 值的平均值,或提供 NA 本身:

R> with(tab, 
aggregate(b, by=list(a), FUN=function(x)
if (any(is.finite(z<-na.omit(x)))) mean(z) else NA))
Group.1 x
1 1 2
2 2 2
3 3 NA
R>

那确实是一行,但我将其分解以使其适合 SO 显示。

您已经有了类似的想法,但我对函数进行了更多修改,以便在所有情况下都返回合适的值。

关于r - 在 R 中聚合 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29872291/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com