Как найти конкретное время при изменении вектора - PullRequest
1 голос
/ 12 июля 2019

Я пытаюсь получить время суток, когда меняется дневной максимум (прорывы)

> df
                     Preco day_high day_low
2018-02-01 09:01:21 3203.5   3203.5    3202
2018-02-01 09:01:21 3203.5   3203.5    3202
2018-02-01 09:01:22 3204.0   3204.0    3202
2018-02-01 09:01:22 3204.0   3204.0    3202
2018-02-01 09:01:22 3204.0   3204.0    3202
2018-02-01 09:01:22 3204.0   3204.0    3202
2018-02-01 09:01:22 3204.0   3204.0    3202
2018-02-01 09:01:22 3204.0   3204.0    3202
2018-02-01 09:01:22 3204.0   3204.0    3202
2018-02-01 09:01:22 3204.0   3204.0    3202
2018-02-01 09:01:23 3204.5   3204.5    3202

Вот что я попробовал:

library(lubridate)

for (i in 1:150) {
    if ((df$day_high[i] != df$day_high[i+1]) & (df$day_high[i] == df$day_high[i - minutes(1)])) {
        print(df[[i]][i])
    } else {
        next
    }
}
> Error in if ((df$day_high[i] != df$day_high[i + 1]) & (df$day_high[i]
> ==  :    argument is of length zero

Это то, что я ищу (периоды, которые day_high меняются):

[1]
2018-02-01 09:01:22 3204.0   3204.0    3202
2018-02-01 09:01:23 3204.5   3204.5    3202

Код для воспроизведения:

df = structure(c(3203.5, 3203.5, 3204, 3204, 3204, 3204, 3204, 3204, 
3204, 3204, 3204.5, 3203.5, 3203.5, 3204, 3204, 3204, 3204, 3204, 
3204, 3204, 3204, 3204.5, 3202, 3202, 3202, 3202, 3202, 3202, 
3202, 3202, 3202, 3202, 3202), class = c("xts", "zoo"), .indexCLASS = c("POSIXct", 
"POSIXt"), tclass = c("POSIXct", "POSIXt"), .indexTZ = "", tzone = "", index = structure(c(1517482881, 
1517482881, 1517482882, 1517482882, 1517482882, 1517482882, 1517482882, 
1517482882, 1517482882, 1517482882, 1517482883), tzone = "", tclass = c("POSIXct", 
"POSIXt")), .Dim = c(11L, 3L), .Dimnames = list(NULL, c("Preco", 
"day_high", "day_low")))

1 Ответ

3 голосов
/ 12 июля 2019

Мы можем использовать diff и выбрать строки, которые не совпадают с предыдущей строкой.

df[diff(df$day_high) != 0, ]

#                    Preco day_high day_low
#2018-02-01 19:01:22  3204     3204    3202
#2018-02-01 19:01:23  3204.5   3204.5  3202
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...