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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据最后一行条件创建新列相关的知识,希望对你有一定的参考价值。

我已经下载了基于股票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行相同,但我不明白为什么。

你能帮我搞清楚吗?

答案

听起来这就是你想要做的事情。 lag()默认为单个时间段滞后(即前一个值)。

require(dplyr)

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

以上是关于根据最后一行条件创建新列的主要内容,如果未能解决你的问题,请参考以下文章

根据 R 中的条件包含满足条件创建一个新列

python 根据条件创建新列

根据 if-elif-else 条件创建新列时出错

根据前一行值创建一个新列并删除当前行

根据前 n 行有条件地创建新列

如何根据熊猫中其他列的条件创建新列