【发布时间】:2011-12-19 14:54:55
【问题描述】:
我有一个大型数据框,其中包含来自多个州的调查多年的观察结果。这是数据结构:
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
对于每个 state/survey.year 组合,我想插入 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)
}
但我不确定如何解决这个问题。您的慷慨意见和建议将不胜感激。本质上 - 我只是想在每个 state/survey.year 组合中插入“obs2”,所以时间参考与“obs1”的参考一致。
当然,如果有一种巧妙的方法可以在不调用 plyr 函数的情况下做到这一点,那么我会对此持开放态度......
谢谢!
【问题讨论】: