[英]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
,觀察值acc
與t
的2016-01-02 07:05:00
和2016-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.