x<- xts(c(1, 1.1, 1.2, 1.3, 1.4, -.9, 1.2), Sys.Date()-7:1)
在x
中,我想要一个列出下面提到的结果。
x
[,1] max high
2013-07-07 1.0 1.0
2013-07-08 1.1 1.1
2013-07-09 1.2 1.2
2013-07-10 1.3 1.3
2013-07-11 1.4 1.4
2013-07-12 0.9 1.4
2013-07-13 1.2 1.4
如果我使用rollapply function
我必须保持宽度固定但我希望每个日期的日期最大值。 rollapply
无效。
我想使用像rollapply(x,[1:i],max)这样的东西,我代表不。排。
我得到的答案是获得max.high我应该使用cummax并且它的工作非常好。由于我被禁止在这个论坛中提出新问题,我正在添加我的问题。我不知道它是否正确,但我没有其他方法可以做到。
x < - xts(c(100,98,105,100,99,98,96,95,94,93,99,100,106),Sys.Date() - 13:1) colnames(x)&lt; - “value” x $ max&lt; - cummax(x $ value) x $ trade&lt; - ifelse(x $ max * 0.95&gt; = x $ value,1,0) X 价值最大贸易贸易1 2013-07-05 100 100 0 0 2013-07-06 98 100 0 0 2013-07-07 105 105 0 0 2013-07-08 100 105 0 0 2013-07-09 99 105 1 1 2013-07-10 98 105 1 0 2013-07-11 96 105 1 0 2013-07-12 95 105 1 0 2013-07-13 94 105 1 1 2013-07-14 93 105 1 0 2013-07-15 99 105 1 -1 2013-07-16 100 105 0 0 2013-07-17 106 106 0 -1
直到列交易,我的代码工作,但我需要另一个列trade1,它基于如果值至少小于列max的5%,则trade1列将为1的逻辑,然后它将再次给我1 value列的最大值是10%以上,当值从值94上升5%或更多时(当trade1列为1时,值列为94),trade1列应该给我-1并且再次当列值从值99上升10%或更多时(当trade1列为1时,值列为99)
如果任何人要求更清晰,我会再次尝试这样做。 问候 Anup
答案 0 :(得分:8)
cummax
计算扩展(而不是滚动)窗口的最大值。
cummax(x)
# [,1]
# 2013-07-07 1.0
# 2013-07-08 1.1
# 2013-07-09 1.2
# 2013-07-10 1.3
# 2013-07-11 1.4
# 2013-07-12 1.4
# 2013-07-13 1.4
答案 1 :(得分:2)
您可以使用TTR
包中的runMax。我觉得它对xts
时间序列非常有用。
> x<- xts(c(1, 1.1, 1.2, 1.3, 1.4, -.9, 1.2), Sys.Date()-7:1)
> colnames(x) <- "value"
> x$max.high <- runMax(x$value , 4) # change this parameter to match your needs
> x
value max.high
2013-07-07 1.0 NA
2013-07-08 1.1 NA
2013-07-09 1.2 NA
2013-07-10 1.3 1.3
2013-07-11 1.4 1.4
2013-07-12 -0.9 1.4
2013-07-13 1.2 1.4
> x$max.high <- ifelse(is.na(x$max.high) , x$value , x$max.high)
> x
value max.high
2013-07-07 1.0 1.0
2013-07-08 1.1 1.1
2013-07-09 1.2 1.2
2013-07-10 1.3 1.3
2013-07-11 1.4 1.4
2013-07-12 -0.9 1.4
2013-07-13 1.2 1.4