根据最后一行条件创建新列

时间:2017-12-19 19:52:26

标签: r

我已经下载了基于股票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仍为TRUElnegative仍为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行相同,但我无法理解为什么。

你能帮我搞清楚吗?

1 个答案:

答案 0 :(得分:1)

听起来这就是你正在尝试做的事情。 lag()默认为单个句点滞后(即前一个值)。

require(dplyr)

wdofut %>% arrange(Data) %>% mutate(lpositive = ifelse(lag(positive == TRUE),TRUE,FALSE),
lnegative = ifelse(lag(negative == TRUE), TRUE, FALSE))