You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用tapply计算数据框列均值异常,请求技术帮助

问题排查与解决

为什么你的代码会输出大量结果

你用tapply(df$s1, df$s1, mean)时,第二个参数是分组依据——你把s1的每个数值都当成一个分组,相当于每个数据点单独成组,每组的均值就是它自己,所以会输出和s1长度一样的结果,完全不是你要的整列均值。

正确的实现方式

最简便的方法:用colMeans

colMeans是R里专门计算数据框每列均值的函数,直接用就行:

x <- seq(1,100)
s1 <- dnorm(x, mean = 61, sd = 63)
s2 <- dnorm(x, mean = 38, sd = 5)
s3 <- dnorm(x, mean = 355, sd = 58)

df <- data.frame(s1,s2,s3)

# 直接计算每列均值
means <- colMeans(df)

非要用tapply的话这么写

tapply是对向量按分组计算,要算整列均值,得把所有数据归为同一个分组:

# 计算单列s1的均值
mean_s1 <- tapply(df$s1, rep(1, nrow(df)), mean)

# 批量计算三列的均值
means <- sapply(df, function(col) tapply(col, rep(1, length(col)), mean))

额外提醒

你生成的s3因为均值355远大于x的范围(1-100),所以所有s3的数值都极小(接近0),最终均值也会趋近于0,这是正态分布的特性,不是代码错误。

内容的提问来源于stack exchange,提问作者Boris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 18:55:29