【问题标题】:Interpolate variables on subsets of dataframe在数据帧的子集上插入变量
【发布时间】: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 函数的情况下做到这一点,那么我会对此持开放态度......

谢谢!

【问题讨论】:

    标签: r plyr


    【解决方案1】:

    这应该很简单,

    ddply(df,.(state,survey.year),transform,
                                  new.obs2 = approxExtrap(time1,obs1,xout = obs2,
                                                          method = "linear",
                                                          rule = 2))
    

    但我不能向您保证任何事情,因为我完全不知道您的 for 循环的意义是什么。 (每次循环都会覆盖df[,"new.obs2"]?你把整个数据框df初始化为NULLindirect是什么?)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-02
      • 2020-02-04
      • 2015-09-08
      • 2021-02-02
      • 2023-02-21
      相关资源
      最近更新 更多