使用Rollapply函数返回索引值或计数

时间:2014-03-31 20:38:55

标签: r xts rollapply

感谢您的帮助!我正在使用时间序列数据并尝试识别观察发生的计数,同时使用R中的rollapply函数。为了澄清,这里有一些代码:

# Sample Data
dates <- c("2014-01-01","2014-01-02","2014-01-03","2014-01-04","2014-01-05",
       "2014-01-06","2014-01-07","2014-01-08","2014-01-09","2014-01-10")
data <- c(20,12,31,26,22,22,31,10,22,23)
xts.object <- as.xts(data,as.Date(dates))

# Apply 4-Day Min
rollMin <- rollapply(xts.object,4,min)
xts.object2 <- cbind(xts.object,rollMin)

# Desired Output
desiredOutput <- c(NA,NA,NA,3,4,1,2,1,2,3)
xts.object3 <- cbind(xts.object2,desiredOutput)
colnames(xts.object3) <- c("data","rollMin","desiredOutput")

enter image description here

desiredOutput的前3次观察是NA,因为为rollapply函数选择的窗口大小设置为4.在第4次观察时,min为12且已经为3天,因此所需的输出在2014-01-04显示3。

再次感谢!

1 个答案:

答案 0 :(得分:2)

您也可以在这里使用rollapplywhich.min将返回最小值的索引。要获得天数,您必须通过索引缩小窗口大小(+ 1,因为R索引从1开始)。

rollapply(xts.object,4,function(x)NROW(x)-which.min(x)+1)
#           [,1]
#2014-01-01   NA
#2014-01-02   NA
#2014-01-03   NA
#2014-01-04    3
#2014-01-05    4
#2014-01-06    2
#2014-01-07    3
#2014-01-08    1
#2014-01-09    2
#2014-01-10    3