Fill NA in a time series only to a limited number

前端 未结 5 999
滥情空心
滥情空心 2020-12-01 17:08

Is there a way we can fill NAs in a zoo or xts object with limited number of NAs forward. In other words like fill

5条回答
  •  抹茶落季
    2020-12-01 17:30

    Without using na.locf, but the idea is to split your xts by group of non missing values, then for each group replacing only the 3 first values (after the non misssing one) with the first value. It is a loop , but since it is only applied on group , it should be faster than a simple loop over all the values.

    zz <- 
    unlist(sapply(split(coredata(x),cumsum(!is.na(x))),
           function(sx){
             if(length(sx)>3) 
               sx[2:4] <- rep(sx[1],3)
             else sx <- rep(sx[1],length(sx))
             sx
           }))
    ## create the zoo object since , the latter algorithm is applied only to the values 
    zoo(zz,index(x))
    
    2014-09-20 2014-09-21 2014-09-22 2014-09-23 2014-09-24 2014-09-25 2014-09-26 2014-09-27 2014-09-28 2014-09-29 2014-09-30 2014-10-01 2014-10-02 
             1          1          1          1          5          5          5          5         NA         NA         11         12         12 
    2014-10-03 2014-10-04 2014-10-05 2014-10-06 2014-10-07 2014-10-08 2014-10-09 
            12         12         NA         NA         NA         19         20 
    

提交回复
热议问题