向前/向后估算

imputing forward / backward

我试图以这种方式估算一些纵向数据(见下文)。对于每个人 (id),如果第一个值是 NA,我想使用该个人的第一个观察值来估算,无论何时发生。然后,我想根据每个人观察到的最后一个值来估算前向(见下文估算)。

var 值不一定单调增加。这些值可能是字符向量。

我已经尝试了几种方法来解决这个问题,但仍然没有得到满意的解决方案。

有什么想法吗?

id <- c(1,1,1,1,1,1,1,2,2,2,2)
time <- c(1,2,3,4,5,6,7,3,5,7,9)
var <- c(NA,NA,1,NA,2,3,NA,NA,2,3,NA)
imputed <- c(1,1,1,1,2,3,3,2,2,3,3)
dat <- data.table(id, time, var, imputed)

   id time var imputed
 1:  1    1  NA       1
 2:  1    2  NA       1
 3:  1    3   1       1
 4:  1    4  NA       1
 5:  1    5   2       2
 6:  1    6   3       3
 7:  1    7  NA       3
 8:  2    3  NA       2
 9:  2    5   2       2
10:  2    7   3       3
11:  2    9  NA       3
library(zoo)

dat[, newimp := na.locf(na.locf(var, FALSE), fromLast=TRUE), by = id]
dat
#    id time var imputed newimp
# 1:  1    1  NA       1      1
# 2:  1    2  NA       1      1
# 3:  1    3   1       1      1
# 4:  1    4  NA       1      1
# 5:  1    5   2       2      2
# 6:  1    6   3       3      3
# 7:  1    7  NA       3      3
# 8:  2    3  NA       2      2
# 9:  2    5   2       2      2
#10:  2    7   3       3      3
#11:  2    9  NA       3      3