一列中相同行的平均值
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。对于中位数计算,如果有偶数个观察值,则计算中间两个的平均值。
我想创建 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。对于中位数计算,如果有偶数个观察值,则计算中间两个的平均值。