Как узнать, находится ли дата в заданном интервале времени - PullRequest
1 голос
/ 16 марта 2019

У меня есть следующий фрейм данных с датами.

ID   start_date      end_date      Intrvl                    a_date           b_date          c_date
1     2013-12-01     2014-05-01    2013-12-01--2014-05-01    2014-01-01       2014-03-10      2015-03-10       
2     2016-01-01     2016-07-01    2016-01-01--2016-07-01    2014-02-01       NA              2016-02-01
3     2014-01-01     2014-07-01    2014-01-01--2014-07-01    2014-02-01       2016-02-01      2014-07-01    

Я хочу знать,

  1. , если даты из столбцов a_date, b_date и c_date находятся в пределахинтервал, который я рассчитал, используя lubridate :: interval (start_date, end_date).В действительности у меня есть фрейм данных с 400 столбцами.

  2. Имена столбцов даты, если даты находятся в пределах соответствующего интервала.Как и вывод ниже

    ID  Within_Intrvl
    1   a_b  
    2   a  
    3   a_c
    

Я прочитал ответы на этот вопрос [ссылка] , но мне не помогло.Спасибо!

1 Ответ

1 голос
/ 17 марта 2019

Если ваши данные уже преобразованы в lubridate,

input<- df %>%
  mutate(start_date=ymd(start_date)) %>%
  mutate(end_date=ymd(end_date)) %>%
  mutate(a_date=ymd(a_date)) %>%
  mutate(b_date=ymd(b_date)) %>%
  mutate(c_date=ymd(c_date)) %>%
  mutate(Intrvl=interval(start_date, end_date)) 

вы можете использовать оператор% Within% в lubridate

result <- input %>%
  mutate(AinIntrvl=if_else(a_date %within% Intrvl,"a","")) %>%
  mutate(BinIntrvl=if_else(b_date %within% Intrvl,"b","")) %>%
  mutate(CinIntrvl=if_else(c_date %within% Intrvl,"c","")) %>%
  mutate(Within_Intrvl=paste(AinIntrvl,BinIntrvl,CinIntrvl,sep="_")) %>%
  select(-start_date,-end_date,-Intrvl,-a_date,-b_date,-c_date )

Вы можете отформатировать столбец Within_Intrvl, как вам нравится,а также решить, как вы хотите иметь дело с АН

...