Lineare Interpolation mit dplyr

Ich versuche das @ zu benutzna.approx() -Funktion aus demzoo Bibliothek (in Verbindung mitxts) um fehlende Werte aus wiederholten Messdaten für mehrere Personen mit mehreren Messungen zu interpolieren.

Beispieldaten..

event.date <- c("2010-05-25", "2010-09-10", "2011-05-13", "2012-03-28", "2013-03-07",    
                "2014-02-13", "2010-06-11", "2010-09-10", "2011-05-13", "2012-03-28",
                "2013-03-07", "2014-02-13")
variable   <- c("neck.bmd", "neck.bmd", "neck.bmd", "neck.bmd", "neck.bmd", "neck.bmd",
                "wbody.bmd", "wbody.bmd", "wbody.bmd", "wbody.bmd", "wbody.bmd", "wbody.bmd")
value      <- c(0.7490, 0.7615, 0.7900, 0.7730, NA, 0.7420, 1.0520, 1.0665, 1.0760,
                1.0870, NA, 1.0550)
## Bind into a data frame
df <- data.frame(event.date, variable, value)
rm(event.date, variable, value)
## Convert date
df$event.date <- as.Date(df$event.date)
## Load libraries
library(magrittr)
library(xts)
library(zoo)

Ich kann einen fehlenden Datenpunkt für ein einzelnes Ergebnis für eine bestimmte Person mit @ interpolierexts() undna.approx() ....

## Subset one variable
wbody <- subset(df, variable == "wbody.bmd")
## order/index and then interpolate
xts(wbody$value, wbody$event.date) %>%
  na.approx()
2010-06-11 1.052000
2010-09-10 1.066500
2011-05-13 1.076000
2012-03-28 1.087000
2013-03-07 1.070977
2014-02-13 1.055000

Nicht ideal mit einer Matrix zurückgegeben, aber ich kann das umgehen. Das Hauptproblem, das ich habe, ist, dass ich mehrere Ergebnisse für mehrere Personen habe. Ich dachte vielleicht naiv, dass dies ein Split-Apply-Combine-Problem ist, das ich nutzen könntedplyr um dies auf folgende Weise zu erreichen ...

## Load library
library(dplyr)
## group and then arrange the data (to ensure dates are correct)
df %>%
  group_by(variable) %>%
    arrange(variable, event.date) %>%
      xts(.$value, .$event.date) %>%
        na.approx()
Error in xts(., .$value, .$event.date) : 
  order.by requires an appropriate time-based object

Es scheint, dassdplyr spielt nicht gut mitxts/zoo und ich habe ein paar Stunden damit verbracht, nach Tutorials / Beispielen zum Interpolieren fehlender Datenpunkte in R zu suchen, aber alles, was ich gefunden habe, sind Einzelfallbeispiele, und bisher konnte ich nichts finden Vorgehensweise für mehrere Websites für mehrere Personen (Ich erkenne, dass ich es zu einem Problem für mehrere Personen machen könnte, wenn ich meine Daten auf eine breite Basis stelle, aber das Problem, auf das ich stoße, wird dadurch immer noch nicht gelöst.)

ber Gedanken / Ratschläge / Einsichten zum weiteren Vorgehen würde ich mich sehr freue

Vielen Dan

EDIT: Klarstellung, dass einige Funktionen von @ kommzoo package.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage