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解决方案,但任何有关如何实现这一目标的信息都会非常有用.谢谢.
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)