【发布时间】:2020-02-24 19:30:59
【问题描述】:
我有两个要按最近日期匹配的数据框,创建一个新数据框,其中包含两者的值(包括“最近日期匹配”)。正是关于包括最近日期匹配的最后一部分给我带来了问题。
#Data sets
date1= as.POSIXct(c("2013-08-03", "2013-09-04", "2013-09-08", "2013-09-12", "2013-11-01"))
date2= as.POSIXct(c("2013-08-06", "2013-09-20", "2013-09-12", "2013-09-14", "2014-11-01","2010-11-01","2014-06-01"))
Num1<-seq(1,5)
Num2<-seq(1,7)
DF1<-data.frame(date1,Num1)
DF2<-data.frame(date2,Num2)
这个 for 循环给了我我想要的东西,但是在我的数据集上运行的时间太长了。
for(i in seq(1,nrow(DF1))){
Data<-DF1[i,]
#Date
DataDate<-Data$date1
MinTime<-which.min(abs(DataDate-DF2$date2))
Data2<-DF2[MinTime,]
DF1[i,'NearestNum2']<-Data2[,"Num2"]
DF1[i,'NearestDate2']<-Data2[,"date2"]
DF1[i,'TimeDiff']<-as.numeric(difftime(DF1[i,'date1'], DF1[i,'NearestDate2'], units='secs'))
}
DF1
我使用 data.table 包找到了一些类似问题的优秀答案。根据之前的答案,这就是我厌倦的:
#This line should provide with me with the numerical value associated with the nearest date
setDT(DF1)[, NearestNum2 := setDT(DF2)[DF1, Num2, on=c(date2="date1"), roll="nearest"]]
#This line "should provide me with the actual nearest date used, but does not
setDT(DF1)[, NearestDate1 := setDT(DF2)[DF1, date2, on=c(date2="date1"), roll="nearest"]]
这里的问题是(与 for 循环结果相反),使用 data.table 代码的“nearestDate2”列只是原始日期的重复。有人可以提供一个 data.table (或任何有效的代码),可以为我提供与上述 for 循环相同的输出吗?
【问题讨论】:
标签: r data.table