awkでランクを計算しますか?

awkでランクを計算しますか?

重複した数値を含めることができるawk配列のランクを計算したいと思います。

Rでは次のようになります。

R> x=c(92, 3, 1, 4, 15, 4)
R> rank(x)
[1] 6.0 2.0 1.0 3.5 5.0 3.5

Unixで配列の数をソートする方法は?

これは、繰り返される数字を許可しない解決策です。重複した数値を持つ配列のランクを返すawk関数を持つ人はいますか?

awk '
    FNR == NR {numbers[$1]=1; next} 
    FNR == 1 {
        n = asorti(numbers, sorted, "@ind_num_asc")
        for (i=1; i<=n; i++) rank[sorted[i]] = i
    }
    {print rank[$1]}
' file file

ベストアンサー1

rank複数の場合、Rにおける関数の基本動作K次回は平均を出すようですKk-1ランク(このプロセスで追加ランクを使用):

$ awk '
    FNR == NR {numbers[$1]++; next}
    FNR == 1 {
        n = asorti(numbers, sorted, "@ind_num_asc")
        for (i=1; i<=n; i++) {
            k = numbers[sorted[i]]; 
            rank[sorted[i]] = i + offset + (k-1)/2; 
            offset += (k-1)
        }
    }
    {print rank[$1]}
' file file
6
2
1
3.5
5
3.5

多重性を記録するnumbers[$1]=1ように変更されましたnumbers[$1]++

おすすめ記事