R: Interpolación de NA por grupo
Me gustaría realizar una interpolación lineal en una variable de un marco de datos que tenga en cuenta la: 1) diferencia de tiempo entre los dos puntos, 2) el momento en que se tomaron los datos y 3) el individuo tomado para medir la variable.
Por ejemplo, en el siguiente marco de datos:
df <- data.frame(time=c(1,2,3,4,5,6,7,1,2,3),
Individuals=c(1,1,1,1,1,1,1,2,2,2),
Value=c(1, 2, 3, NA, 5, NA, 7, 5, NA, 7))
df
Me gustaría obtener:
result <- data.frame(time=c(1,2,3,4,5,6,7,1,2,3),
Individuals=c(1,1,1,1,1,1,1,2,2,2),
Value=c(1, 2, 3, 4, 5, 6, 7, 5, 5.5, 6))
result
No puedo usar exclusivamente la funciónna.approx
del paquetezoo
como todas las observaciones no son consecutivas, algunas observaciones pertenecen a un individuo y otras observaciones pertenecen a otros. La razón es porque si el segundo individuo tuviera su primera obsesión conNA
y usaría exclusivamente la funciónna.approx
, Estaría usando información delindividual==1
para interpolar elNA
delindividual==2
(por ejemplo, el siguiente marco de datos tendría éxito)
df_2 <- data.frame(time=c(1,2,3,4,5,6,7,1,2,3),
Individuals=c(1,1,1,1,1,1,1,2,2,2),
Value=c(1, 2, 3, NA, 5, NA, 7, NA, 5, 7))
df_2
He intentado usar los paqueteszoo
ydplyr
:
library(dplyr)
library(zoo)
proof <- df %>%
group_by(Individuals) %>%
na.approx(df$Value)
Pero no puedo realizargroup_by
en unzoo
objeto.
¿Sabes cómo interpolar?NA
valores en una variable por grupos?
Gracias por adelantado,