返回R中过去的最接近日期或等效日期

返回R中过去的最接近日期或等效日期,r,R,我有两个数据帧周一和t日期,如下所示: T Dates User.ID tdate 1 11-02-2013 1 04-03-2013 1 16-04-2015 1 03-05-2015 1 05-05-2015 1 11-05-2015 1 29-09-2015 1 26-11-2013 1 28-11-2013 3 01-02-2016 4 22-11-2

我有两个数据帧
周一
t日期
,如下所示:

T Dates 
User.ID   tdate
1       11-02-2013
1       04-03-2013
1       16-04-2015
1       03-05-2015
1       05-05-2015
1       11-05-2015
1       29-09-2015
1       26-11-2013
1       28-11-2013
3       01-02-2016
4       22-11-2012
4       25-04-2013
4       29-05-2013



Mondays     
ID  Monday      Closest Date
1   05-09-2016  
1   20-04-2015  
1   27-07-2015  
1   08-06-2015  
1   13-10-2014  
3   16-09-2013  
3   16-02-2015  
3   29-08-2016  
3   26-05-2014  
3   29-02-2016  
3   18-07-2016  
3   22-02-2016  
4   16-11-2015  
lasttxndate <- function(userid, mydate){
+     return(max(subset(tdates$Date.Asked, tdates$User.ID == userid & tdates$Date.Asked <= as.Date(mydate))))
+ }
现在,我想在
tdates
的第3列中为
mondays
中的每个
User.ID
返回过去的最近日期或等效日期。 例如 预期产量为

Mondays       
ID  Monday      Closest Date
1   05-09-2016  29-09-2015
1   20-04-2015  16-04-2015
1   27-07-2015  11-05-2015
1   08-06-2015  11-05-2015
1   13-10-2014  28-11-2013
3   16-09-2013  NA
3   16-02-2015  NA
3   29-08-2016  01-02-2016
3   26-05-2014  NA
3   29-02-2016  01-02-2016
3   18-07-2016  01-02-2016
3   22-02-2016  01-02-2016
4   16-11-2015  29-05-2013
对于ID=1的<代码>和<代码>2016年9月5日星期一<代码>

过去最近的
tdate
29-09-2015
,因此它将在
最近日期
列中获取此日期

注意:如果未发现任何交易日期超过或等于周一的日期,则填写
NAs

这必须针对一个非常大的数据集进行,任何关于如何实现这一点的想法。 我已使用自定义功能尝试了此操作,如下所示:

T Dates 
User.ID   tdate
1       11-02-2013
1       04-03-2013
1       16-04-2015
1       03-05-2015
1       05-05-2015
1       11-05-2015
1       29-09-2015
1       26-11-2013
1       28-11-2013
3       01-02-2016
4       22-11-2012
4       25-04-2013
4       29-05-2013



Mondays     
ID  Monday      Closest Date
1   05-09-2016  
1   20-04-2015  
1   27-07-2015  
1   08-06-2015  
1   13-10-2014  
3   16-09-2013  
3   16-02-2015  
3   29-08-2016  
3   26-05-2014  
3   29-02-2016  
3   18-07-2016  
3   22-02-2016  
4   16-11-2015  
lasttxndate <- function(userid, mydate){
+     return(max(subset(tdates$Date.Asked, tdates$User.ID == userid & tdates$Date.Asked <= as.Date(mydate))))
+ }
lasttxndate
#日期转换
周一$周一此代码运行良好:

T.Dates <- data.frame( 
User.ID=c("1","1","1","1","1","1","1","1","1","3","4","4","4"),
tdate=as.Date(c("11-02-2013","04-03-2013","16-04-2015","03-05-2015","05-05-2015","11-05-2015","29-09-2015","26-11-2013","28-11-2013","01-02-2016","22-11-2012","25-04-2013","29-05-2013"),format="%d-%m-%Y"))


Mondays <- data.frame( 
  ID=c("1","1","1","1","1","3","3","3","3","3","3","3","4"),
  Monday=as.Date(c("05-09-2016","20-04-2015","27-07-2015","08-06-2015","13-10-2014","16-09-2013","16-02-2015","29-08-2016","26-05-2014","29-02-2016","18-07-2016","22-02-2016","16-11-2015"),format="%d-%m-%Y"))

Mondays$Closest.Date <- NA
Mondays$Closest.Date <- as.Date(Mondays$Closest.Date, format="%d-%m-%Y")

for(i in 1:nrow(Mondays)){
Mondays[i,"Closest.Date"] <- max(T.Dates$tdate[T.Dates$User.ID==Mondays$ID[i] & T.Dates$tdate <= Mondays[i,"Monday"]])  
}

T.Dates即使是一个小样本的数据对我们来说也很好!:)而且
dput(周一),…
也很有帮助。正如joel.wilson所说:请仅包括理解和再现问题所需的数据。数据缩短,请参阅编辑的问题。请根据您的需求添加预期输出examples@Sotos:已添加输出,请参见。此操作正常,请您解释一下日期[星期一,on=c(“ID”,“星期一”),roll=Inf]
@pankaj关于data.table join,有很多很好的答案。对于滚动连接,请阅读。也请参见此处