【问题标题】:Return Index value or Count with Rollapply Function使用 Rollapply 函数返回索引值或计数
【发布时间】:2014-03-31 20:38:55
【问题描述】:

感谢您的所有帮助!我正在使用时间序列数据并尝试识别发生观察的计数,同时使用 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")

desiredOutput 的前 3 次观察结果为 NA,因为为 rollapply 函数选择的窗口大小设置为 4。在第 4 次观察中,最小值为 12,并且已持续 3 天,因此 desiredOutput 在 2014 年显示为 3 -01-04。

再次感谢!

【问题讨论】:

  • 为什么6号和7号的值应该是1和2而不是2和3?

标签: r xts rollapply


【解决方案1】:

您也可以在这里使用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

【讨论】:

  • @JoshuaUlrich:你是对的。我没有认识到第 6 和第 7 值的意外(至少对我而言)行为(请参阅您对问题的评论)。我将等待 OP 的回答并最终编辑/删除我的答案。
  • 非常酷!谢谢,我不知道 which.min 功能。我认为我的问题表述有误,但使用您的解决方案帮助我找出了问题
  • 我打算回答基本相同的问题,但没有硬编码4:function(x) NROW(x)-which.min(x)+1
  • @JoshuaUlrich:谢谢,那就更好了。我改变了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-14
  • 2022-01-16
  • 2014-09-22
  • 2020-06-02
  • 1970-01-01
相关资源
最近更新 更多