Como posso interpolar um valor perdido dependendo do valor anterior e próximo?

0

Eu tenho um arquivo grande com duas colunas, gostaria de interpretar o valor em 0,00, 0,50, 1,00, 1,50 ... etc (se já não existir) calculando a média do valor anterior e do próximo valor. Por exemplo, o valor correspondente de 3.00 é perdido, por isso quero adicionar uma linha com 3.00 na primeira coluna e um valor correspondente na segunda coluna = (2.99 + 3.56) /2=3.14 e faça o mesmo para 3.50, 4.00, 4.50 ... etc esta é minha entrada

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

e esta minha saída desejada

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
    
por Mohsen El-Tahawy 16.01.2017 / 17:39

1 resposta

1

Eu faria isso em duas etapas.

Primeiro, interpole os dados ausentes. Aqui está um exemplo com awk :

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

Funciona assim:

  • Primeiro, se notarmos que um valor na coluna 1 está faltando (o intervalo com o valor anterior é > 0,25), imprimimos a linha ausente calculando uma média para a coluna 2.
  • Em seguida, imprimimos a linha atual e definimos os valores anteriores para o próximo ciclo

Por fim, você pode filtrar as linhas indesejadas:

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

Este último comando awk exibe apenas as linhas cujo primeiro valor termina com 0 .

    
por 16.01.2017 / 19:54