如何用给定的信息标记观察结果

时间:2016-12-23 14:27:43

标签: r datetime dataframe match

考虑使用数字变量a以5分钟的时间间隔收集的数据和离散变量acc,它表示是否发生了任何事件(0 1事件发生时没有发生事故:

a<-c(1:(288*4))
t<-seq(as.POSIXct("2016-01-01 00:05:00"), as.POSIXct("2016-01-05 00:00:00"), by = '5 min')
acc<-rep(0,288*4)
df<-data.frame(t,a,acc)

现在我有另一个数据集,其中包含收集期间发生事件的时间(精确到1秒):

T<-sample(seq(as.POSIXct("2016-01-01 00:05:00"), as.POSIXct("2016-01-05 00:00:00"), by = '1 sec'),size = 5)

我想根据acc中的时间将最接近的2个先前观察T标记为1。例如,如果事件发生在2016-01-02 07:13:23,则观察结果为&#39; acc t2016-01-02 07:05:00的{​​{1}}被标记为2016-01-02 07:10:00

我怎么能设法做到这一点?

2 个答案:

答案 0 :(得分:1)

ind <- findInterval(T, df$t)
df$acc[c(ind, ind + 1)] <- 1

答案 1 :(得分:0)

一种方法可能是:

library(lubridate)
df$acc=apply(sapply(T,function(x) x %within% interval((df$t - minutes(4)-seconds(59)),(df$t + minutes(4)+seconds(59)))),1,sum)

lubridate允许轻松操作日期,minutes(x)seconds(x)为句点对象添加x分钟或秒。
interval()用于创建受df$t±4min59s时间限制的时间间隔。
sapply()用于检查T中的任何时间是否在该区间内 apply()用于折叠sapply()的结果(它为T中的每个元素输出1列)

如果T包含的值与df$t中的2016-01-04 12:05:00 CET完全相同,例如2.1.0,则此值只会为1。