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