前进/后退

时间:2015-03-12 16:22:09

标签: r data.table

我试图以这种方式估算一些纵向数据(见下文)。对于每个人(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

1 个答案:

答案 0 :(得分:4)

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