R 如何确定日期是否在给定的时间间隔内

R 如何确定日期是否在给定的时间间隔内,r,dplyr,lubridate,R,Dplyr,Lubridate,我有以下带有日期的数据框 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 201

我有以下带有日期的数据框

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    
我想知道

  • 如果a_date、b_date和c_date列中的日期在我使用 润滑:间隔(开始日期、结束日期)。在real中,我有一个400列的数据帧

  • 如果日期在相应的时间间隔内,则日期列的名称。如下面的输出

    ID  Within_Intrvl
    1   a_b  
    2   a  
    3   a_c
    
  • 我已经阅读了这个问题的答案,但没有帮助我。
    谢谢大家!

    假设您的数据已使用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)) 
    
    input%
    突变(开始日期=ymd(开始日期))%>%
    突变(结束日期=ymd(结束日期))%>%
    突变(a_日期=ymd(a_日期))%>%
    突变(b_日期=ymd(b_日期))%>%
    突变(c_日期=ymd(c_日期))%>%
    突变(Intrvl=间隔(开始日期、结束日期))
    
    您可以在lubridate中使用%within%运算符

    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 )
    
    结果%
    变异(AinIntrvl=if_else(日期%在%Intrvl内,“,”)%>%
    变异(BinIntrvl=if_-else(b_-date%在%Intrvl,“b”和“))%>%
    变异(CinIntrvl=if_-else(c_-date%在%Intrvl,“c”和“))%>%
    突变(在_Intrvl=paste(AinIntrvl、BinIntrvl、CinIntrvl、sep=“”))内%>%
    选择(-start_date,-end_date,-Intrvl,-a_date,-b_date,-c_date)
    
    您可以根据需要格式化INTERVL列,还可以决定如何处理NAs