我已经下载了基于股票renko的时间序列数据。由于它不是常规的时间序列数据,我相信我不能使用ts
库。
我正在尝试创建一个汇总连续正/负renko框的列。
到目前为止我做了什么:
library(xlsx)
last <- function(arr, line_no, offset) {
line_no <- max(1, line_no - offset)
line_no <- min(nrow(arr), line_no)
arr[arr$idx == line_no,]
}
wdofut <- read.xlsx('~/Documents/tmp/WDOFUT_5R_20171219.xlsx',sheetIndex = 1,header=TRUE)
wdofut <- wdofut[ order(unclass(wdofut[,1])), ]
wdofut$idx <- 1:nrow(wdofut)
wdofut$positive <- wdofut$Abertura < wdofut$Fechamento
wdofut$lpositive <- last(wdofut,wdofut$indice,1)$positive
wdofut$negative <- wdofut$Abertura > wdofut$Fechamento
wdofut$lnegative <- last(wdofut,wdofut$indice,1)$negative
运行此代码后,lpositive
仍为TRUE
,lnegative
仍为FALSE
所有行
> cols <- c(7,1,8:11)
> wdofut[c(1:15),cols]
idx Data positive lpositive negative lnegative
5454 1 2017-07-05 17:58:59 TRUE TRUE FALSE FALSE
5449 2 2017-07-06 09:00:00 TRUE TRUE FALSE FALSE
5450 3 2017-07-06 09:00:00 TRUE TRUE FALSE FALSE
5451 4 2017-07-06 09:00:00 TRUE TRUE FALSE FALSE
5452 5 2017-07-06 09:00:00 TRUE TRUE FALSE FALSE
5453 6 2017-07-06 09:00:00 TRUE TRUE FALSE FALSE
5448 7 2017-07-06 09:01:00 TRUE TRUE FALSE FALSE
5446 8 2017-07-06 09:01:59 TRUE TRUE FALSE FALSE
5447 9 2017-07-06 09:01:59 TRUE TRUE FALSE FALSE
5445 10 2017-07-06 09:06:00 FALSE TRUE TRUE FALSE
5444 11 2017-07-06 09:14:59 TRUE TRUE FALSE FALSE
5442 12 2017-07-06 09:24:00 FALSE TRUE TRUE FALSE
5443 13 2017-07-06 09:24:00 TRUE TRUE FALSE FALSE
5441 14 2017-07-06 09:36:00 FALSE TRUE TRUE FALSE
5440 15 2017-07-06 09:58:00 FALSE TRUE TRUE FALSE
>
但是,当在R控制台上调用last
函数时,它会返回正确的答案
> last(wdofut,11,1)[,cols]
idx Data positive lpositive negative lnegative
5445 10 2017-07-06 09:06:00 FALSE TRUE TRUE FALSE
>
我观察到lpositive和lnegative值与第1行相同,但我无法理解为什么。
你能帮我搞清楚吗?
答案 0 :(得分:1)
听起来这就是你正在尝试做的事情。 lag()
默认为单个句点滞后(即前一个值)。
require(dplyr)
wdofut %>% arrange(Data) %>% mutate(lpositive = ifelse(lag(positive == TRUE),TRUE,FALSE),
lnegative = ifelse(lag(negative == TRUE), TRUE, FALSE))