R 每小时最后一次NA的回填向量

R 每小时最后一次NA的回填向量,r,xts,R,Xts,我有一个每天有10分钟数据的XTS对象。NA表示该小时的其余数据无效。然后,我需要用下一个小时的第一个数据点(本例中为9)来“回填”无效数据 例如: y <- as.xts(c(3,4,NA,8,5,4,9,5,8),as.POSIXct(c("2010-01-05 08:00", "2010-01-05 08:10", "2010-01-05 08:20", "2010-01-05 08:30", "2010-01-05 08:40", "2010-01-05 08:50", "

我有一个每天有10分钟数据的XTS对象。
NA
表示该小时的其余数据无效。然后,我需要用下一个小时的第一个数据点(本例中为9)来“回填”无效数据

例如:

    y <- as.xts(c(3,4,NA,8,5,4,9,5,8),as.POSIXct(c("2010-01-05 08:00", "2010-01-05 08:10", "2010-01-05 08:20", "2010-01-05 08:30", "2010-01-05 08:40", "2010-01-05 08:50", "2010-01-05 09:00", "2010-01-05 09:10", "2010-01-05 09:20"), format = "%Y-%m-%d %H:%M"))
这应该允许我应用一个按小时计算的函数,但这就是我卡住的地方。

我们可以试试

y2 <- ave(y, cumsum(is.na(y)), format(index(y)-1, "%H"), 
           FUN = function(x) if(any(is.na(x))) tail(x,1) else x)
identical(y1, y2)
#[1] TRUE
y2我们可以试试

y2 <- ave(y, cumsum(is.na(y)), format(index(y)-1, "%H"), 
           FUN = function(x) if(any(is.na(x))) tail(x,1) else x)
identical(y1, y2)
#[1] TRUE
y2
#将NA之后的所有值也设为NA,直到下一个小时
y2
#在NA之后生成所有值,直到下一个小时
y2
y2 <- ave(y, cumsum(is.na(y)), format(index(y)-1, "%H"), 
           FUN = function(x) if(any(is.na(x))) tail(x,1) else x)
identical(y1, y2)
#[1] TRUE
#make all values after NA also NA until next hour
y2 <- do.call(c, 
        tapply(y, trunc(index(y), "hours"), 
               FUN = function(x) x * cumprod(NA^is.na(x))))

y2 <- as.xts(na.locf(y1, fromLast = TRUE))
#                    [,1]
#2010-01-05 08:00:00    3
#2010-01-05 08:10:00    4
#2010-01-05 08:20:00    9
#2010-01-05 08:30:00    9
#2010-01-05 08:40:00    9
#2010-01-05 08:50:00    9
#2010-01-05 09:00:00    9
#2010-01-05 09:10:00    5
#2010-01-05 09:20:00    8