У меня есть большой фрейм данных, в котором есть наблюдения из опросов, проведенных в разных штатах за несколько лет. Вот структура данных:
state | survey.year | time1 | obs1 | time2 | obs2
CA | 2000 | 1 | 23 | 1.2 | 43
CA | 2001 | 2 | 43 | 1.4 | 52
CA | 2002 | 5 | 53 | 3.2 | 61
...
CA | 1998 | 3 | 12 | 2.3 | 20
CA | 1999 | 4 | 14 | 2.8 | 25
CA | 2003 | 5 | 19 | 4.3 | 29
...
ND | 2000 | 2 | 223 | 3.2 | 239
ND | 2001 | 4 | 233 | 4.2 | 321
ND | 2003 | 7 | 256 | 7.9 | 387
Для каждой комбинации состояние / обзор.год я хотел бы интерполировать obs2, чтобы его временное положение совпало с (time1, obs1).
т.е. я хотел бы разбить фрейм данных на фрагменты state / survey.year, выполнить линейную интерполяцию, а затем сшить отдельные фреймы данных state / survey.year обратно вместе в основной фрейм данных.
Я пытался понять, как использовать для этого пакеты plyr и Hmisc. Но все время запутываюсь.
Вот код, который я написал для интерполяции:
require(Hmisc)
df <- new.obs2 <- NULL
for (i in 1:(0.5*(ncol(indirect)-1))){
df[,"new.obs2"] <- approxExtrap(df[,"time1"],
df[,"obs1"],
xout = df[,"obs2"],
method="linear",
rule=2)
}
Но я не уверен, как развязать плыр по этой проблеме. Будем очень признательны за ваши щедрые советы и предложения. По сути - я просто пытаюсь интерполировать «obs2» в каждой комбинации состояние / обзор.год, так что временные ссылки совпадают с таковыми из «obs1».
Конечно, если есть отличный способ сделать это без вызова функций plyr, я был бы открыт для этого ...
Спасибо!