我想建立一个我之前提出的问题(Adding row for missing value in data.table)。 Actualy我不需要添加这么多的零,我只需要第一个缺少的零。
所以这次我只想在同一个(' ida',' idb')的最后一个条目不是0的情况下插入0。我们假设没有原始data.table中的0。
所以一个例子是:
ida idb value date
A 3 26600 2004-12-31
A 3 19600 2005-03-31
A 3 18200 2005-06-30
A 4 9560 2004-12-31
B 1 2600 2004-12-31
B 1 100 2005-03-31
B 1 8200 2005-06-30
B 1 9560 2007-12-31
B 9 1423 2004-12-31
B 9 1235 2005-06-30
C 2 8700 2005-12-31
给予:
ida idb value date
A 3 26600 2004-12-31
A 3 19600 2005-03-31
A 3 18200 2005-06-30
A 4 9560 2004-12-31
A 4 0 2005-03-31
B 1 2600 2004-12-31
B 1 100 2005-03-31
B 1 8200 2005-06-30
B 1 9560 2007-12-31
B 9 1423 2004-12-31
B 0 0 2005-03-31
B 9 1235 2005-06-30
B 0 0 2007-12-31
C 2 8700 2005-12-31
答案 0 :(得分:1)
我找到了办法。 所以我们回答上一个问题:
setkey(dt, idb, date)
dt[, .SD[CJ(unique(idb), unique(date))], by = ida][is.na(value), value := 0]
我们再添加一些步骤:
setkey(dt, idb, date)
dt[, .SD[CJ(unique(idb), unique(date))][is.na(value), value := 0][prev.value := c(0, value[-.N])][value > 0 | (value == 0 & prev.value > 0), ][, prev.value := NULL], by = ida]
因此,对于每个子集,我们将NAs替换为0,然后添加与先前值对应的新列。最后,我们只保留行!= 0和第一个0,我们删除prev.value列。