【发布时间】:2018-04-02 06:18:47
【问题描述】:
我有一个数据框,每个 id 有 24 小时,如下所示:
library(data.table)
DT=data.table(id=c(rep(1,24),rep(2,24),rep(3,24)),
hour=c(rep(0:23,3)),
val=c(rep(c(18,36,27,18,36,39,99,99,72,81,54,72,18,9,36,27,18,90,36,27,18,45,54,63),3)))
然后我还有一个数据表,其中包含每个 id 的高峰开始和结束时间,如下所示:
c=data.table(id=c(1,2,3),start=c(3,6,9),end=c(9,12,4))
我必须在数据表 a 中附加一列作为 rush,然后标记它是否落在每个 id 的高峰时间范围内。就像 id 1 一样,高峰时间是 3 到 9(3、4、5、 6,7,8,9),因此 DT 中包含这些行的所有记录都应标记为 rush=1 列,其余记录应标记为 rush=0 表示休息。
我试过这样
setkey(c, start, end)
DT[,hour_replica:=hour]
result <- foverlaps(DT, c, by.x=c('hour','hour_replica'),
by.y=c('start', 'end'))
但是会报错
列开头的所有条目都应该是
感谢任何帮助。
【问题讨论】:
-
我一直很欣赏包含重现问题的代码的问题。谢谢。