R: Лаги в последовательной серии - PullRequest
0 голосов
/ 25 августа 2018

Мне нужна помощь в R: я пытаюсь определить пробелы в последовательной серии из двух переменных. В настоящее время у меня есть список, похожий на этот.

data <- fetch(rs, n=-1)
names(data) <- c("~Open", "~Close")

Browse[2]> typeof(data)
[1] "list"

~Open    ~Close
10000     10019
10020     10039
10040     10051  -> Gap from 10052->10060 : I need 10040-10060
10060     10079
10100     10119  -> Gap from 10080->10099 : I need 10060-10099 or 10080-10099
10160     10179  -> Gap from 10120->10159 : I need 10120-10159 or 10100-10159

Мой результат должен выглядеть как список с пропущенными записями (Start, Stop). Например:

Open        Close
10040       10060
10080       10099
10100       10159

или

Open        Close
10040       10099
10120       10159

Может ли кто-нибудь указать мне правильное направление?

Заранее спасибо.

Обновление: пытаюсь сделать:

gaps <- data %>% 
  mutate(lead_start = lead(Open) - 1) %>% 
  filter(Close != lead_start) %>% 
  transmute(Open = Close + 1, Close = lead_start)

Я получаю следующее сообщение об ошибке:

Error in mutate_impl(.data, dots) : 
  Evaluation error: object 'Open' not found.

На самом деле мне просто нужно было сделать это:

data <- fetch(rs, n=-1)
lastOpen <- data[dim(data)[1], 2]
lastOpen <- lastOpen - lastOpen %% 20;
gaps <- as_tibble(data) %>% 
  mutate(lead_start = lead(Open) - 1) %>%
  filter(Close != lead_start) %>% 
  transmute(Open = (Close + 1) - ((Close + 1) %% 20), Close = lead_start) %>%
  add_row(Open = lastOpen, Close = Sys.time())

Благодаря mkeskisa !!!!!

1 Ответ

0 голосов
/ 25 августа 2018

Я не уверен, что полностью понимаю, чего вы пытаетесь достичь, но я думаю, что это поможет вам найти пропущенные пробелы.Вы говорите, что хотите пропустить пропуски, но список, который вы предоставляете, будет совпадать с вашими предыдущими пропусками.Например, от 10040 до 10060 перекрываются с 10060, от 10079 до 10060. Обычно вы, вероятно, можете добиться того, что вы пытаетесь сделать, используя лаг и / или отрыв.

library(tidyverse)
df <- tibble::tribble(
  ~Start,  ~Stop,
  10000L, 10019L,
  10020L, 10039L,
  10040L, 10051L,
  10060L, 10079L,
  10100L, 10119L,
  10160L, 10179L
  )

gaps <- df %>% 
  mutate(lead_start = lead(Start) - 1) %>% 
  filter(Stop != lead_start) %>% 
  transmute(start = Stop + 1, stop = lead_start)

gaps
# A tibble: 3 x 2
  start  stop
  <dbl> <dbl>
1 10052 10059
2 10080 10099
3 10120 10159
...