【问题标题】:Print standard deviation of column in file using R/awk使用 R/awk 打印文件中列的标准差
【发布时间】: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

标签: linux r awk


【解决方案1】:

我不太清楚您的 awk 出了什么问题,但对于 R 命令,您可能会发现 write 有帮助:

R -q -e "x<- read.csv('file.csv',header=FALSE)[,1] ; write(sd(x),file='result.txt')"

【讨论】:

    猜你喜欢
    • 2017-04-18
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    • 2016-02-16
    • 2019-05-15
    • 1970-01-01
    • 1970-01-01
    • 2019-06-13
    相关资源
    最近更新 更多