Образец набора доступных гораздо больших наборов данных имеет следующий формат:
Station <-c("A","A","A","A","A","A","A","A","A","A","A","A","A","A","A")
Parameter <-c(2,3,NA,4,4,9,NA,NA,10,15,NA,NA,NA,18,20)
Par_Count <-c(1,1,1,2,2,1,2,2,1,1,3,3,3,1,1)
df<-data.frame(Station, Parameter, Par_Count)
df
Station Parameter Par_Count
A 2 1
A 3 1
A NA 1
A 4 2
A 4 2
A 9 1
A NA 2
A NA 2
A 10 1
A 15 1
A NA 3
A NA 3
A NA 3
A 18 1
A 20 1
Я хочу приблизить NA, число которых меньше 2, со средним значением следующих и предыдущих доступных значений для NA в этот столбец. В исходном наборе данных где-то NA - это 100, так что я хочу игнорировать последовательные NA больше 3. Par_Count представляет количество последовательных вхождений этого конкретного значения в параметре. Я пробовал с:
library(zoo)
df1 <- within(df, na.approx(df$Parameter, maxgap = 2))
и даже для одного случая с:
df1 <- within(df, Parameter[Parameter == is.na(df$Parameter) & Par_Count == 1] <-
lead(Parameter) - lag(Parameter))
, но ничего не получалось. Это не изменило возникновение значения NA. Желаемый вывод выглядит так:
Station Parameter Par_Count
A 2 1
A 3 1
A 3.5 1
A 4 2
A 4 2
A 9 1
A 9.5 2
A 9.75 2 <--here 9.5 will also work
A 10 1
A 15 1
A NA 3
A NA 3
A NA 3
A 18 1
A 20 1