簡體   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