R:基于给定时间范围的数据帧子集行

R:基于给定时间范围的数据帧子集行,r,datetime,dplyr,subset,R,Datetime,Dplyr,Subset,假设我有df1: Start_Date End_Date Value 2001-01-01 2001-12-31 1 2002-01-01 2002-12-31 2 2003-01-01 2003-12-31 3 2004-01-01 2004-12-31 4 2005-01-01 2005-12-31 5 &df2: DateTime 2003-01-01 2003-05-09 2004-12-31 2005-01-31 20

假设我有df1:

Start_Date    End_Date     Value
2001-01-01    2001-12-31   1
2002-01-01    2002-12-31   2
2003-01-01    2003-12-31   3
2004-01-01    2004-12-31   4
2005-01-01    2005-12-31   5 
&df2:

DateTime
2003-01-01
2003-05-09
2004-12-31
2005-01-31
2005-08-13
我想做的是通过检查df2中的哪个日期时间位于df1中的开始日期和结束日期之间,将值从df1导入df2。对预期结果的看法:

DateTime      Value
2003-01-01    3
2003-05-09    3
2004-12-31    4
2005-01-31    5
2005-08-13    5
请建议使用dplyr和lubridate提供解决方案

开始之前,请确保所有日期的格式都相同:

df1% 变更开始日期=ymdStart日期,结束日期=dmyEnd日期 df2% mutateDateTime=ymdDateTime 在你的情况下,它只对你的专栏结束日期有必要

首先,我交叉连接了这两个data.frames,因为我看不到任何合并这两个dfs的简单解决方案

df3% 筛选器介于日期时间、开始日期、结束日期%>% 选择开始日期、结束日期 给予

值日期时间 1 3 2003-01-01 2 3 2003-05-09 3 4 2004-12-31 4 5 2005-01-31 5 5 2005-08-13 使用package data.table的另一个选项 setDTdf1 setDTdf2 df1[df2,on=.Start_Date=DateTime, .日期时间、值] 屈服

日期时间值 1: 2003-01-01 3 2: 2003-05-09 3 3: 2004-12-31 4 4: 2005-01-31 5 5: 2005-08-13 5 附加选项。使用lubridate,您可以检查日期的间隔时间

library(tidyverse)
df2 %>% 
  rowwise() %>% 
  mutate(out = df1$Value[(DateTime %within% interval(df1$Start_Date, df1$End_Date))])