如何"推断" R中面板数据的值?

时间:2016-12-23 00:06:45

标签: r

我的面板数据的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

此处约会方法成功插值NA值,但不进行外推。

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

1 个答案:

答案 0 :(得分:5)

执行此操作的一种方法是使用同一个包na.spline()中的zoo

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