Это решает проблему.Я использую простой старый for
цикл для выполнения этой задачи.Некоторые люди могут сказать, что его нельзя использовать в R, потому что он медленный, однако иногда трудно найти элегантное и простое решение без него.
library(xts)
x <- read.table(text = "Date Col1 Col2 Col3
2015-06-30 1.25 1.58 NA
2015-07-31 58.7 1.87 0
2015-08-31 NA 71.8 0
2015-09-30 15.4 78.1 0
2015-10-31 7.25 62.4 15
2015-11-30 1.0 11.5 78", header = TRUE)
xtbl <- xts(x[,-1], order.by = as.Date(x[[1]]))
roll_count <- function(y) {
y <- is.na(y) | y == 0
y <- as.numeric(!y)
for(i in seq_along(y)[-1]) {
if(y[i] != 0) {
y[i] <- y[i-1] + y[i]
}
}
y[y == 0] <- NA
y
}
res <- apply(xtbl, 2, roll_count)
as.xts(res, order.by = index(xtbl))