假设我有这个数据集:
library(data.table)
comb <- CJ(1:4, 2005:2008)
comb$var3 <- c(1, NA, 2, NA, 3, NA, 4, NA, 5, NA, 6, NA, 7, NA, 8, NA)
我想根据以前的值填写NA。例如,我想要Id 1&amp; 2006年的价值1. 2008年的价值2.其他ID的价值相同。最后,数据集应如下所示:
library(data.table)
comb <- CJ(1:4, 2005:2008)
comb$var3 <- c(1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8)
我怎样才能实现它?
答案 0 :(得分:1)
我们可以使用na.locf
library(zoo)
comb[, var3 := na.locf(var3)]
comb
# V1 V2 var3
# 1: 1 2005 1
# 2: 1 2006 1
# 3: 1 2007 2
# 4: 1 2008 2
# 5: 2 2005 3
# 6: 2 2006 3
# 7: 2 2007 4
# 8: 2 2008 4
# 9: 3 2005 5
#10: 3 2006 5
#11: 3 2007 6
#12: 3 2008 6
#13: 4 2005 7
#14: 4 2006 7
#15: 4 2007 8
#16: 4 2008 8
基于该示例,以下内容也应该起作用
comb[, var3 := cumsum(!is.na(var3))]