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

관련 정보