【问题标题】:How to "extrapolate" values of panel data in R?如何“推断”R中面板数据的值?
【发布时间】:2016-12-23 00:06:44
【问题描述】:

我有一个面板数据,其 NA 值如下所示:

    uid year    month   day value
1   1   2016    8   1   NA
2   1   2016    8   2   NA
3   1   2016    8   3   30
4   1   2016    8   4   NA
5   1   2016    8   5   20
6   2   2016    8   1   40
7   2   2016    8   2   NA
8   2   2016    8   3   50
9   2   2016    8   4   NA
10  2   2016    8   5   NA

我想进行线性插值,所以我写了这段代码:

library(dplyr)  
library(zoo)

panel_df <- group_by(panel_df, userid)
panel_df <- mutate(panel_df, value=na.approx(value, na.rm=FALSE))

然后我得到输出:

    uid year    month   day value
1   1   2016    8   1   NA
2   1   2016    8   2   NA
3   1   2016    8   3   30
4   1   2016    8   4   25
5   1   2016    8   5   20
6   2   2016    8   1   40
7   2   2016    8   2   45
8   2   2016    8   3   50
9   2   2016    8   4   NA
10  2   2016    8   5   NA

这里的 approx 方法成功地插入了 NA 值,但没有外推。

有没有什么好方法可以用这个用户的第一个非 NA 值(30)替换第一行和第二行的值?同样,如何将第 9 行和第 10 行的值替换为该用户的最后一个非 NA 值(50)?

【问题讨论】:

    标签: r


    【解决方案1】:

    一种方法是使用来自同一包zoona.spline()

    panel_df <- group_by(panel_df, uid)
    panel_df <- mutate(panel_df, value=na.spline(value))
    panel_df
    Source: local data frame [10 x 5]
    Groups: uid [2]
    
         uid  year month   day value
       <int> <int> <int> <int> <dbl>
    1      1  2016     8     1    40
    2      1  2016     8     2    35
    3      1  2016     8     3    30
    4      1  2016     8     4    25
    5      1  2016     8     5    20
    6      2  2016     8     1    40
    7      2  2016     8     2    45
    8      2  2016     8     3    50
    9      2  2016     8     4    55
    10     2  2016     8     5    60
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-05
      • 2016-09-15
      • 2021-04-30
      • 2014-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多