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) 的东西,其中 i 代表否。的行。我得到的答案是要获得 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$max<- cummax(x$value) x$trade<- ifelse(x$max*0.95>=x$value,1,0) x value max trade trade1 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,它基于如果 value 至少小于列 max 的 5%,trade1 列将为 1 的逻辑,然后当 value 列是时它会再次给我 1至少比列最大值的 10%,并且当值从值 94 上升 5% 或更多时(因为当 trade1 列为 1 时,值列是 94),trade1 列应该给我 -1,当列值时再次给我从值 99 上升 10% 或更多(当 trade1 列为 1 时,值列再次为 99)
如果有人需要更清楚,我会再次尝试这样做。关于阿努普