我想在用另一列过滤数据集后计算该列的平均值和方差。例如,使用数据集:
0 1
0 2
0 3
0 4
0 5
1 1
1 2
1 3
1 4
1 5
2 1
2 2
2 3
2 4
2 5
我想要的结果:
0 3 2.5
1 3 2.5
2 3 2.5
其中第一列为分类变量,第二列和第三列为平均值和方差。
你能帮助我吗?提前谢谢。
答案1
使用韦尔福德 (Welford) 计算方差的方法并假设方差非零(即每个类别都有多个实例):
awk '
{count[$1]++; sum[$1]+=$2; sumsq[$1]+=$2*$2}
END {
for(i in count) {m = sum[i]/count[i]; print i, m, (sumsq[i] - count[i]*m**2)/(count[i]-1)}
}
' dataset
0 3 2.5
1 3 2.5
2 3 2.5
捕获零方差情况留作练习。