我有一个包含许多缺失值的数据集为-999。部分数据是
input.txt
30
-999
10
40
23
44
-999
-999
31
-999
54
-999
-999
-999
-999
-999
-999
-999 and so on
我想在不考虑缺失值的情况下计算每6行间隔的平均值。
欲望输出
ofile.txt
29.4
42.5
-999
我正在尝试这个
awk '!/\-999/{sum += $1; count++} NR%6==0{print count ? (sum/count) : count;sum=count=0}' input.txt
它正在给予
29.4
42.5
0
答案 0 :(得分:3)
我不完全确定为什么,如果您对-999
值进行折扣,您认为-999
对于平均值而言是{0}更好的选择。第三组。在前两组中,-999
值既不会导致总数也不会导致计数,因此可以认为零是更好的选择。
但是,您可能希望-999
代表"缺乏价值" (肯定会出现组中没有值的情况)。如果是这种情况,您只需在原始代码中输出-999
而不是count
:
awk '!/\-999/{sm+=$1;ct++} NR%6==0{print ct?(sm/ct):-999;sm=ct=0}' input.txt
即使您确定零 是一个更好的答案,我仍然会明确表示而不是自己输出计数变量:
awk '!/\-999/{sm+=$1;ct++} NR%6==0{print ct?(sm/ct):0;sm=ct=0}' input.txt