R: Интерполяция NA по группам
Я хотел бы выполнить линейную интерполяцию в переменной кадра данных, которая учитывает: 1) разницу во времени между двумя точками, 2) момент, когда были взяты данные, и 3) индивидуум, взятый для измерения переменной.
Например, в следующем кадре данных:
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
Я хотел бы получить:
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
Я не могу использовать исключительно функциюna.approx
пакетаzoo
Поскольку все наблюдения не являются последовательными, некоторые наблюдения принадлежат одному человеку, а другие наблюдения принадлежат другим. Причина в том, что если второе лицо будет иметь свое первоеNA
и я бы использовал исключительно функциюna.approx
Я буду использовать информацию изindividual==1
интерполироватьNA
изindividual==2
(например, следующий кадр данных будет иметь ошибку sucherror)
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
Я пробовал использовать пакетыzoo
а такжеdplyr
:
library(dplyr)
library(zoo)
proof <- df %>%
group_by(Individuals) %>%
na.approx(df$Value)
Но я не могу выполнитьgroup_by
вzoo
объект.
Вы знаете, как интерполироватьNA
значения в одной переменной по группам?
Заранее спасибо,