У меня есть ежедневные наблюдения с множеством пропущенных значений, и я пытаюсь передать первое не пропущенное значение через вектор для каждого человека.
В ходе поиска, который я проделал до сих пор, я обнаружил функцию na.locf
в пакете zoo
; однако теперь мне нужно настроить эту функцию на основе переменной id
в моем фрейме данных. Подходит ли ddply
функция для этого? Если да, может ли кто-нибудь мне помочь, пожалуйста, выясните, как включить вывод в новую переменную с именем result
в том же фрейме данных?
Вот что у меня есть на данный момент:
# Load required libraries
library(zoo)
library(plyr)
# Create the data
data <- structure(list(id = c(1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2,
2, 2, 2), day = c(0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, 4, 5, 6, 7,
8), value = c("NA", "1", "NA", "NA", "NA", "NA", "NA", "NA",
"NA", "NA", "1", "NA", "NA", "NA", "NA", "NA")), .Names = c("id",
"day", "value"), row.names = c(NA, -16L), class = "data.frame")
# Propagate the value of the first non-missing observation in data$value forward for each id
data$result <- na.locf(data$value, na.rm = FALSE)
Приветствуются любые мысли о том, как запускать функцию na.locf
каждым id
. Спасибо!