Как устранить непоследовательные даты на основе значений столбцов? - PullRequest
0 голосов
/ 15 января 2019

У меня есть датафрейм с датами, и мне нужно исключить непоследовательные значения, но способ определения последовательного статуса разбит на два столбца следующим образом:

ID | END        | BEG
1  | 9999-12-31 | 2017-07-01
1  | 2017-06-30 | 2016-01-01
1  | 2015-12-31 | 2015-11-12
1  | 2008-07-26 | 2003-02-24

Для этого конкретного случая ожидаемый результат будет

ID | END        | BEG
1  | 9999-12-31 | 2017-07-01
1  | 2017-06-30 | 2016-01-01
1  | 2015-12-31 | 2015-11-12

Может также случиться, что даты (которые заказаны) представляют эту схему:

ID | END        | BEG
2  | 9999-12-31 | 2018-04-01
2  | 9999-12-31 | 2017-01-01
2  | 2016-07-31 | 2014-07-15
2  | 2011-08-31 | 2009-01-01
2  | 2008-12-31 | 1991-11-04

В этом случае, поскольку обе первые записи имеют 9999-12-31 в качестве КОНЦА, мы начинаем с третьей строки и сразу обнаруживаем, что следующий случай не является последовательным, поэтому для этого конкретного случая остается только эта дата, оставляя как результат:

ID | END        | BEG
2  | 2016-07-31 | 2014-07-15

Есть ли способ сделать это с помощью пакета dplyr? Заранее спасибо.

1 Ответ

0 голосов
/ 15 января 2019

Проверьте это решение:

library(tidyverse)
library(lubridate)

df %>%
  mutate_at(2:3, ymd) %>%
  mutate(
    BEG_lag = lag(BEG),
    cons = END == BEG_lag - days(1)
  ) %>%
  fill(cons, .direction = 'up') %>%
  filter(cons) %>%
  select(1:3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...