У меня есть набор данных, где я наблюдаю переменную для некоторых людей, а не для других. Для тех людей, где я наблюдаю переменную, я наблюдаю ее ровно один раз. Тем не менее, количество наблюдений на человека, а также положение наблюдаемого значения варьируется.
Я хотел бы заполнить все значения NA для данного индивидуума значением, отличным от NA, в случае, если есть значение, отличное от NA. В противном случае НС должны оставаться НС.
Вот пример набора данных:
#data.frame of 100 individuals with 10 observations each
data <- data.frame(group = rep(1:100,each=10),value = NA)
#first 50 individuals get a value at the fifth observation, others don't have value
data$value[seq(5,500,10)] <- rnorm(50)
Пока все хорошо, не большая проблема. Взятые из другого потока, мы могли бы сделать что-то подобное, используя dplyr
и tidyr
:
data <- data %>%
group_by(group) %>% #by group
fill(value) %>% #default direction down
fill(value, .direction = "up") #also fill NAs upwards
Это прекрасно решает проблему. Тем не менее, я должен сделать это около 80 миллионов. наблюдения, которые занимают часы. Есть ли более быстрый метод? Я думаю, что data.table
может быть хорошим кандидатом.
Было бы также хорошо, если бы можно было адаптировать подход, чтобы заполнить только те NA, которые появляются перед значением.
Спасибо!