R: Interpolação de NAs por grupo
Eu gostaria de realizar uma interpolação linear em uma variável de um quadro de dados que leve em consideração a: 1) diferença de tempo entre os dois pontos, 2) o momento em que os dados foram coletados e 3) o indivíduo levado para medir a variável.
Por exemplo, no próximo quadro de dados:
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
Eu gostaria de obter:
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
Não posso usar exclusivamente a funçãona.approx
do pacotezoo
porque todas as observações não são consecutivas, algumas pertencem a um indivíduo e outras pertencem a outros. A razão é porque, se o segundo indivíduo tiver sua primeira obsrevação comNA
e eu usaria exclusivamente a funçãona.approx
, Eu estaria usando informações doindividual==1
para interpolar oNA
doindividual==2
(por exemplo, o próximo quadro de dados teria esse erro)
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
Eu tentei usar os pacoteszoo
edplyr
:
library(dplyr)
library(zoo)
proof <- df %>%
group_by(Individuals) %>%
na.approx(df$Value)
Mas eu não posso realizargroup_by
em umzoo
objeto.
Você sabe como interpolarNA
valores em uma variável por grupos?
Desde já, obrigado,