如何根据前一个值和下一个值插入缺失值?

如何根据前一个值和下一个值插入缺失值?

我有一个包含两列的大文件,我想解释 0.00、0.50、1.00、1.50 ...等处的值 (如果尚不存在)通过计算前一个值和下一个值的平均值。例如对应的值3.00错过了,所以我想在第一列中添加一行 3.00 并在第二列中添加相应的值 =(2.99 + 3.56)/2=3.14并做同样的事情3.50、4.00、4.50...等 这是我的输入

0.00  0.29
0.50  0.79
1.00  1.31
1.50  1.86
2.00  2.42
2.50  2.99
3.25  3.56
3.75  4.15
4.25  4.73
4.75  5.32
5.00  5.92
5.50  6.53
6.00  7.15

这是我想要的输出

0.00    0.29
0.50    0.79
1.00    1.31
1.50    1.86
2.00    2.42
2.50    2.99
3.00    3.28
3.50    3.86
4.00    4.44
4.50    5.03
5.00    5.92
5.50    6.53
6.00    7.15

答案1

我会分两步完成。

首先,对缺失的数据进行插值。这是一个示例awk

awk '
    ($1 - prev1) > 0.25 { printf "%.2f  %.2f\n", prev1 + 0.25, (prev2 + $2)/2 }
    { print; prev1 = $1; prev2 = $2 }
' data_file

它的工作原理如下:

  • 首先,如果我们注意到第 1 列中的值缺失(与前一个值的差距 > 0.25),我们通过计算第 2 列的平均值来打印缺失的行。
  • 接下来,我们打印当前行并设置下一个循环的先前值

最后,您可以过滤掉不需要的行:

(previous awk command) | awk '$1 ~ /0$/'

最后一个awk命令仅显示第一个值以 结尾的行0

相关内容