2013-07-14 137 views
0
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),我將代表no。的行。 我已經得到了答案,以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)的< - 「值」 X $最大< - cummax(X $值) X $貿易< - ifelse(X $最大* 0.95> = X $值,1,0) X 值最大的貿易trade1 2013年7月5日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年7月11日96 105 1 0 2013年7月12日95 105 1 0 2013年7月13日94 105 1 1 2013年7月14日93 105 1 0 2013年7月15日99 105 1 - 1 2013年7月16日100 105 0 0 2013年7月17日106 106 0 -1

直到列貿易,我的代碼作品,但我需要它是基於trade1邏輯另一列trade1如果值至少小於列最大值的5%,則列將爲1,然後當列值至少等於列最大值的10%時,它將再次給出1,並且當該值從值的5%或更多94(當trade1列爲1時值列爲94),trade1列應該給我-1,當列值增加1時從價值99 0%以上(如再次值列99時trade1柱1)

如果任何一個需要更加清晰,我會再次嘗試這樣做。 關於 Anup

+0

請不要惡意破壞你的帖子。 – ChrisF

回答

6

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 
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 
+0

非常感謝,這兩個解決方案都很棒...... – ANUP

+0

實際上它不是。我很困惑。我的是一個滾動窗口。 @Vincent建議使用'cummax'。 – haki

+1

對於'runMax'有一個'cumulative'參數應該做同樣的事情。 –