[R] Replacing each NA with the most recent non-NA prior to it

Duncan Murdoch murdoch@dunc@n @end|ng |rom gm@||@com
Wed Feb 27 05:06:09 CET 2019


On 26/02/2019 10:34 p.m., John wrote:
> If I use the na.locf function to replace each NA with the most recent
> non-NA prior to it, then
> 
>> na.locf(c(NA,NA,1,4,NA,2))
> [1] 1 1 1 4 4 2
> 
> I want to keep leading NA's, and this is what I want
>   NA NA 1 4 4 2
> 
> How can I do it?
> 
> The following do not work:
> 
>> na.locf(c(NA,NA,1,4,NA,2), na.rm=FALSE)
> Error in na.locf(c(NA, NA, 1, 4, NA, 2), na.rm = FALSE) :
>    unused argument (na.rm = FALSE)
>> na.locf(c(NA,NA,1,4,NA,2), na.rm=TRUE)
> Error in na.locf(c(NA, NA, 1, 4, NA, 2), na.rm = TRUE) :
>    unused argument (na.rm = TRUE)
> 
> 
> Thank you very much!


There are at least two packages (zoo and imputeTS) which have na.locf 
functions.  The one in zoo does what you want:

 > zoo::na.locf(c(NA,NA,1,4,NA,2), na.rm=FALSE)
[1] NA NA  1  4  4  2

Duncan Murdoch



More information about the R-help mailing list