逐个组填充NA值

Jus*_*evs 5 r dplyr data.table

我试图填充数据集中的一些值.我的数据的简化版本可以在下面找到:

    > example_df
           Date    GROUP   value
157     2018-01-31 10180  3.464
158     2018-02-28 10180  3.413
159     2018-03-31 10180  3.418
160     2018-04-30 10180     NA
161     2018-05-31 10180     NA
162     2018-06-30 10180     NA
163     2018-07-31 10180     NA
164     2018-08-31 10180     NA
165     2018-09-30 10180     NA
166     2018-10-31 10180     NA
167     2018-11-30 10180     NA
168     2018-12-31 10180     NA
169     2019-01-31 10180     NA
170     2019-02-28 10180     NA
171     2019-03-31 10180     NA
172     2019-04-30 10180     NA
173     2019-05-31 10180     NA
174     2019-06-30 10180     NA
175     2019-07-31 10180     NA
176     2019-08-31 10180     NA
177     2019-09-30 10180     NA
178     2019-10-31 10180     NA
179     2019-11-30 10180     NA
373     2018-01-31 10420  5.085
374     2018-02-28 10420  5.051
375     2018-03-31 10420  4.993
376     2018-04-30 10420     NA
377     2018-05-31 10420     NA
378     2018-06-30 10420     NA
379     2018-07-31 10420     NA
380     2018-08-31 10420     NA
381     2018-09-30 10420     NA
382     2018-10-31 10420     NA
383     2018-11-30 10420     NA
384     2018-12-31 10420     NA
385     2019-01-31 10420     NA
386     2019-02-28 10420     NA
387     2019-03-31 10420     NA
388     2019-04-30 10420     NA
389     2019-05-31 10420     NA
390     2019-06-30 10420     NA
391     2019-07-31 10420     NA
392     2019-08-31 10420     NA
393     2019-09-30 10420     NA
394     2019-10-31 10420     NA
395     2019-11-30 10420     NA
589     2018-01-31 10500  5.796
590     2018-02-28 10500  5.860
591     2018-03-31 10500  5.913
592     2018-04-30 10500     NA
593     2018-05-31 10500     NA
594     2018-06-30 10500     NA
595     2018-07-31 10500     NA
596     2018-08-31 10500     NA
597     2018-09-30 10500     NA
598     2018-10-31 10500     NA
599     2018-11-30 10500     NA
600     2018-12-31 10500     NA
601     2019-01-31 10500     NA
602     2019-02-28 10500     NA
603     2019-03-31 10500     NA
604     2019-04-30 10500     NA
605     2019-05-31 10500     NA
606     2019-06-30 10500     NA
607     2019-07-31 10500     NA
608     2019-08-31 10500     NA
609     2019-09-30 10500     NA
610     2019-10-31 10500     NA
611     2019-11-30 10500     NA
Run Code Online (Sandbox Code Playgroud)

如你看到的.对于每个组,我有到今天的月份的值,然后是一组NA,直到下一组的开始.我想做的是,对于每个组,使用源自最后一个非NULL值的序列填充这些NA,并增加一个固定值(我选择0.065)直到该组的最终日期.我更喜欢dplyr解决方案,但任何有关如何实现这一目标的信息都会非常有用.谢谢.

edd*_*ddi 2

library(data.table)
dt = as.data.table(yourdf) # or convert in place using setDT

dt[, value := value[1] + 0.065 * (1:.N - 1)
   , by = .(GROUP, cumsum(!is.na(value)))]
Run Code Online (Sandbox Code Playgroud)

  • 或者`seq`,类似`DF[, v := seq(first(value), by=0.065, length.out=.N), by=.(GROUP, rleid(GROUP, cumsum(!is.na(值))))]` (2认同)