別の列の情報を考慮して、1つの列の値の平均を計算する方法は?

別の列の情報を考慮して、1つの列の値の平均を計算する方法は?

ファイル1:

HOGBRM443983         -2522.00  19800826
HOGBRM445985         -2389.00  19801101
HOUSAM1891409        -1153.00  19811228
HOUSAM2004289        -650.00   19860101
HOUSAM2005991        -843.00   19860109
HOCANM388722         -1546.00  19860116
HOUSAM2007297        -1882.00  19860125
HOUSAM2007389        -1074.00  19860128
HOITAM801038516      -691.00   19860128

2列と3列には、それぞれ1列の各IDの生年月日情報(年、月、日)の値と値が含まれています。各出生年にIDがいくつあるのか、他の年のID平均(2列目)がいくらであるかを確認したいと思います。たとえば、file1には1980年、1981年、1986年のIDがそれぞれ2つ、1つ、6つあるため、出力は次のようになります。

output:

1980 2 -2455.5
1981 1 -1153.00
1986 6 -114.33

最初の列は生まれた年を示し、2番目の列は各年内の複数のIDを示し、3番目の列は異なる年のID平均です。

実際のデータが本当に膨大であることを考えると、どんなアドバイスにも感謝します。

ベストアンサー1

そしてgnu datamash:

cut -c1-35 infile | datamash -W -g 3 count 3 mean 2

cut生年月日から月と日を削除するには、まずデータを処理する必要があります(入力サンプルの確実な選択であるため、これを使用していますが、すべてのツールが可能です)。

HOGBRM443983         -2522.00  1980
HOGBRM445985         -2389.00  1980
HOUSAM1891409        -1153.00  1981
HOUSAM2004289        -650.00   1986
......

次に、にパイプするだけですdatamash。また、3番目の列が年ごとにソートされているとします(並べ替えられていない場合を
使用してください)。datamash -s -W -g ...

おすすめ記事