Линейная интерполяция с использованием dplyr

Я пытаюсь использоватьna.approx() функция отzoo библиотека (совместно сxts) интерполировать пропущенные значения из данных повторных измерений для нескольких лиц с несколькими измерениями.

Пример данных...

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)

Я могу интерполировать одну отсутствующую точку данных для одного результата для данного человека, используяxts() а такжеna.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

Не идеально возвращать матрицу, но я могу обойти это. Однако главная проблема, которую я имею, заключается в том, что у меня несколько результатов для нескольких людей. Я, возможно, наивно думал, что, поскольку это, следовательно, проблема разделения-применения-объединения, которую я мог бы использоватьdplyr добиться этого следующим образом ...

## 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

Кажется, чтоdplyr плохо играет сxts/zoo и я потратил пару часов, пытаясь найти уроки / примеры того, как интерполировать пропущенные точки данных в R, но все, что я нашел, это примеры из одного случая, и до сих пор я не смог ничего найти о том, как сделать это для нескольких сайтов для нескольких людей (я понимаю, что я мог бы сделать это просто проблемой для нескольких людей, изменив свои данные в широкие, но это все равно не решило бы проблему, с которой я столкнулся).

Любые мысли / советы / идеи о том, как действовать, будет принята с благодарностью.

Спасибо

РЕДАКТИРОВАТЬ: разъяснение, что некоторые функции берутсяzoo пакет.

Ответы на вопрос(2)

Ваш ответ на вопрос