R: Interpolation von NAs nach Gruppe
Ich möchte eine lineare Interpolation in einer Variablen eines Datenrahmens durchführen, die Folgendes berücksichtigt: 1) Zeitunterschied zwischen den beiden Punkten, 2) den Zeitpunkt, zu dem die Daten aufgenommen wurden, und 3) die Person, die zur Messung der Variablen herangezogen wurde .
Zum Beispiel im nächsten Datenrahmen:
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
Ich möchte erhalten:
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
Ich kann nicht ausschließlich die Funktion @ verwendna.approx
des Paketszoo
Da nicht alle Beobachtungen aufeinanderfolgend sind, gehören einige Beobachtungen einer Person und andere Beobachtungen anderen. Der Grund ist, dass wenn die zweite Person ihre erste Obsrevation mit @ hätNA
und ich würde ausschließlich die Funktion @ nutzna.approx
, Ich würde Informationen aus dem @ verwendindividual==1
um das @ zu interpolierNA
desindividual==2
(z. B. würde der nächste Datenrahmen einen solchen Fehler haben)
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
Ich habe versucht, die Pakete zu verwendenzoo
unddplyr
:
library(dplyr)
library(zoo)
proof <- df %>%
group_by(Individuals) %>%
na.approx(df$Value)
Aber ich kann nicht durchführengroup_by
in einemzoo
Objekt
Wissen Sie, wie man @ interpolierNA
Werte in einer Variablen nach Gruppen?
Danke im Voraus