【发布时间】:2014-12-19 03:28:32
【问题描述】:
我有一个包含一列数字的文件
4.685
5.440
5.751
4.685
3.979
在我的 shell 脚本中,我想查询其中的许多文件并获得标准差和平均值
我可以很容易地使用 awk 来达到目的
awk '{sum+=$1} END { print sum/NR}' file
当使用 awk 作为标准差时
awk '{x[NR]=$0; s+=$0} END{a=s/NR; for (i in x){ss += (x[i]-a)^2} sd = sqrt(ss/NR); print sd}' file
我收到0.625。这个数字不同于给我0.699的excel。从那以后我发现我可以从命令行执行 R 来打印出 sd:
R -q -e "x <- read.csv('file', header = F); sd(x[ , 1])"
但是,这会产生一些混乱的输出
[1] 4.908
\>
\>
我可以调整 R 命令以仅打印数字而不使用 head 和 cut/awk 吗?
我的用于提取标准偏差的 awk 代码有什么问题?
【问题讨论】:
-
我无法评论 R 命令行部分,但我可以说 Excel 的标准差和你的 awk 标准差不同,因为你除以
N(观察数),而 Excel可能除以N - 1。 -
R 除以 N-1。见
? sd。