你可以
re-write
data.table操作使用
zoo::na.locf
和
data.table::rleid
. 添加2列,每个列用于
lastNonNA
和
nextNonNA
使用
na.locf
.
rleid
将为您提供连续的不同组
NA
. 现在您可以编写逻辑来填充
钠
使用
linear
之间
拉斯特诺娜
和
下一个
.
library(data.table)
library(zoo)
data = data.table(year=2000:2018,
cost = c(100,120,NA,200,220,NA,NA,300,350,470,500,NA,NA,595,NA,NA,NA,720,800))
data[,':='(lastNonNA = na.locf(cost, fromLast = FALSE),
nextNonNA = na.locf(cost, fromLast = TRUE), Group_NA = rleid(is.na(cost)))][
,':='(IDX = 1:.N), by=Group_NA][
,':='(cost = ifelse(is.na(cost), lastNonNA + IDX*((nextNonNA - lastNonNA)/(.N+1)),cost)),
by=Group_NA][,.(year, cost)]