web-dev-qa-db-ja.com

列の平均を計算する方法

これらの列の平均を計算するにはどうすればよいですか(Linux)??

sda               2.91    20.44    6.13    2.95   217.53   186.67    44.55     0.84   92.97
sda               0.00     0.00    2.00    0.00    80.00     0.00    40.00     0.22  110.00 
sda               0.00     0.00    2.00    0.00   144.00     0.00    72.00     0.71  100.00 
sda               0.00    64.00    0.00    1.00     0.00     8.00     8.00     2.63   10.00
sda               0.00     1.84    0.31    1.38    22.09   104.29    74.91     3.39 2291.82 
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00  

例:mean(column 2)

32
Alucard

Awk:

awk '{ total += $2 } END { print total/NR }' yourFile.whatever

読む:

  • 各行について、列2を変数「合計」に追加します。
  • ファイルの最後に、「合計」をレコード数で割って出力します。
68
porges

Perlソリューション:

Perl -lane '$total += $F[1]; END{print $total/$.}' file

-a行を@F配列に自動分割します。これは0から始まるインデックスが付けられています
$.は行番号です

フィールドが空白ではなくカンマで区切られている場合:

Perl -F, -lane '$total += $F[1]; END{print $total/$.}' file

すべての列の平均値を出力するには、合計を配列@tに割り当てます。

Perl -lane 'for $c (0..$#F){$t[$c] += $F[$c]}; END{for $c (0..$#t){print $t[$c]/$.}}' 

出力:

0
0.485
14.38
1.74
0.888333333333333
77.27
49.8266666666667
39.91
1.29833333333333
434.131666666667
3
Chris Koknat

pythonを使用できます。これはLinuxで使用できます。

それがファイルからのものである場合、これを見てください question 、代わりにfloatを使用してください。

例えば:

#mean.py 
def main():
    with open("mean.txt", 'r') as f:
        data = [map(float, line.split()) for line in f]

    columnTwo = []
    for row in data:
        columnTwo.append( row[1] )

    print  sum(columnTwo,0.0) / len( columnTwo )



if __name__=="__main__":
    main()

プリント14.38

行ヘッダーではなく、mean.txtファイルにデータを含めるだけです: "sda"

1
OscarRyz

Simple-r は、次の行で平均を計算します。

r -k2 mean file.txt

2列目。また、すべての統計分析に R環境 を使用するため、より高度な統計分析を実行できます。

0
Tom

David Zaslavsky おもしろい:

with open("mean.txt", 'r') as f: 
    n,t = map(sum, Zip(*((1, float(line.split()[1])) for line in f)))
print t/n
0
OscarRyz