一列中相同行的平均值

average from same rows in one columns

我想创建 awk 代码,它可以在所有行的 $4th 列中找到相同的数字,并计算 $4、$5 列的中位数和平均值,并将其合并到一行。

输入:

     chr10  89623184    89624315    1   0.2062732989
     chr10  89623184    89624315    1   0.2155829606
     chr10  89623184    89624315    1   0.2471277767
     chr10  89623184    89624315    2   0.2236894639
     chr10  89623184    89624315    2   0.2291949506
     chr10  89623184    89624315    2   0.2252482173

输出:

                             MEAN   MEDIAN         MEAN

chr10 89623184    89624315    1   0.2155829606  0.2229946787 
chr10 89623184    89624315    2   0.2252482173  0.2260442106

感谢您的帮助。

awk 救援!

  awk '{
    k =  FS  FS  FS 
    s[k] += 
    v[k] = k in v ? v[k] FS  : 
  }        
  END {
    for(i=1;i<=length(k);i++) printf "%s"," "
    printf " %s       %s\n","MEDIAN","MEAN"
    for (k in s) {
      n = split(v[k], m, FS)
      asort(m)
      median = n%2==0 ? (m[n/2]+m[n/2+1])/2 : m[(n-1)/2]
      print k, median, s[k]/n
    }
  }' file


                          MEDIAN       MEAN
chr10 89623184 89624315 1 0.2062732989 0.222995
chr10 89623184 89624315 2 0.2236894639 0.226044

您的密钥需要是前四个字段,而不仅仅是 4。对于中位数计算,如果有偶数个观察值,则计算中间两个的平均值。