awkを使用して各IDの測定値の標準偏差をどのように印刷できますか?

awkを使用して各IDの測定値の標準偏差をどのように印刷できますか?

各固有ID($ 1)の測定値の標準偏差($ 2)を印刷する必要があります。

データは次のとおりです。

101 560  
101 460
101 530  
101 480  
104 600
104 510
104 500
107 450
107 490
107 550
107 500

ベストアンサー1

Rやdatamashが良い選択かもしれません!

標準偏差の定義によれば、次のようにすることができます。

$ cat my-sd
#!/usr/bin/awk -f

    { s[$1]["sum"] += $2 ; 
      n = s[$1]["oco"] ++; 
      v[$1][n]=$2  }

END { for(x in s){ 
         m=s[x]["sum"]/s[x]["oco"]; 
         s1=0;
         for(y in v[x]){
            s1 += (v[x][y]-m)*(v[x][y]-m);}
         print x, sqrt(s1/s[x]["oco"])}
    }

$ my-sd example
101 39.6074
104 44.9691
107 35.6195

おすすめ記事