繁体   English   中英

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

[英]How to mark the observations with given information

考虑以5分钟的时间间隔收集的数据,其中包含一个数字变量a和一个离散变量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)

我想根据T的时间将最近的2个先前观察的acc标记为1。 例如,如果事件发生在2016-01-02 07:13:23 ,观察值acct2016-01-02 07:05:002016-01-02 07:10:00被标记为1

我怎样才能做到这一点?

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

一种方法是:

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此值仅将1放入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM