Je voudrais effectuer une interpolation linéaire dans une variable d'une trame de données qui prend en compte: 1) le décalage temporel entre les deux points, 2) le moment où les données ont été prises et 3) l'individu pris pour mesurer la variable.R: Interpolation des NA par le groupe
Par exemple, dans la prochaine dataframe:
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
Je voudrais obtenir:
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
Je ne peux pas utiliser exclusivement la fonction na.approx
du paquet zoo
parce que toutes les observations ne sont pas consécutives, certains les observations appartiennent à un individu et les autres observations appartiennent à d'autres. La raison est parce que si le deuxième individu aurait sa première obstruction avec NA
et j'utiliserais exclusivement la fonction na.approx
, j'utiliserais l'information du individual==1
pour interpoler le NA
du individual==2
(par exemple le cadre de données suivant aurait telerror)
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
J'ai essayé d'utiliser les paquets zoo
et dplyr
:
library(dplyr)
library(zoo)
proof <- df %>%
group_by(Individuals) %>%
na.approx(df$Value)
Mais je ne peux pas effectuer group_by
dans un objet zoo
. Savez-vous comment interpoler NA
valeurs dans une variable par groupes?
Merci à l'avance,
Pourriez-vous s'il vous plaît expliquer un peu ce que votre sortie désirée serait? De plus, à quoi sert le groupe 'Ear_tag'? Cette colonne n'existe pas dans la base de données que vous avez fournie? – Pash101