R:基于给定时间范围的数据帧子集行
假设我有df1: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
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))])