每天时间戳之间的差异,夜间休息时间为R
我试图计算两个时间戳之间的差异,并根据日期和uid聚合此值。我已经计算了每个时间间隔的差异,但是我想每天拆分这些时间间隔(因此创建某种午夜休息)。考虑到时间间隔之间的差异会在一夜之间消失,我很难计算每天每个时间间隔之间的时间,因此也就无法计算这些休息时间 以下是我的数据片段:每天时间戳之间的差异,夜间休息时间为R,r,dplyr,timestamp,data.table,difftime,R,Dplyr,Timestamp,Data.table,Difftime,我试图计算两个时间戳之间的差异,并根据日期和uid聚合此值。我已经计算了每个时间间隔的差异,但是我想每天拆分这些时间间隔(因此创建某种午夜休息)。考虑到时间间隔之间的差异会在一夜之间消失,我很难计算每天每个时间间隔之间的时间,因此也就无法计算这些休息时间 以下是我的数据片段: df <- structure(list( start_timestamp = c("2013-03-27 01:21:23", "2013-03-28 07:11:58", "2013-03-28 09:09:56
df <- structure(list(
start_timestamp = c("2013-03-27 01:21:23", "2013-03-28 07:11:58", "2013-03-28 09:09:56", "2013-03-29 00:19:32", "2013-03-29 02:22:53"),
uid = c(0, 0, 0, 0, 0),
prev_start_timestamp = c("2013-03-27 01:13:26", "2013-03-27 05:58:53", "2013-03-28 08:41:41", "2013-03-28 10:47:01", "2013-03-29 02:17:26")), row.names = c("1", "2", "3", "4",
"5"), class = "data.frame")
df这里有一个使用数据的选项。表::foverlaps
:
#create a data.table of daily intervals
datetimes <- DT[, seq(trunc(min(start), "days"), trunc(max(end)+24*60*60), "days")]
days <- data.table(start=datetimes[-length(datetimes)], end=datetimes[-1L], key=cols)
#set keys on original dataset and perform overlaps before calculating usage per day
setkeyv(DT, cols)
foverlaps(DT, days)[,
.(phone_usage=sum(pmin(i.end, end) - pmax(i.start, start))),
.(uid, date=start)]
数据(请注意,我缩短了OP的列名):
库(data.table)
DT这里有一个使用数据的选项。table::foverlaps
:
#create a data.table of daily intervals
datetimes <- DT[, seq(trunc(min(start), "days"), trunc(max(end)+24*60*60), "days")]
days <- data.table(start=datetimes[-length(datetimes)], end=datetimes[-1L], key=cols)
#set keys on original dataset and perform overlaps before calculating usage per day
setkeyv(DT, cols)
foverlaps(DT, days)[,
.(phone_usage=sum(pmin(i.end, end) - pmax(i.start, start))),
.(uid, date=start)]
数据(请注意,我缩短了OP的列名):
库(data.table)
请显示示例输入的预期结果。不是很有用。我正是想看到隔夜休息数据的输出。数据片段看起来没有代表性,调用时间应该如何计算?prev\u start\u timestamp
是通话的开始时间,而start\u timestamp
是通话的结束时间吗?我不知道如何得到它,这就是我问的原因here@DanielO的确,prev_start_time是开始时间,start_timestamp是结束时间请显示示例输入的预期结果。不是很有用。我正是想看到隔夜休息数据的输出。数据片段看起来没有代表性,调用时间应该如何计算?prev\u start\u timestamp
是通话的开始时间,而start\u timestamp
是通话的结束时间吗?我不知道如何得到它,这就是我问的原因here@DanielO的确,prev_start_time是开始时间,start_timestamp是结束时间
library(data.table)
DT <- data.table(
end = c("2013-03-27 01:21:23", "2013-03-28 07:11:58", "2013-03-28 09:09:56", "2013-03-29 00:19:32", "2013-03-29 02:22:53"),
uid = c(0, 0, 0, 0, 0),
start = c("2013-03-27 01:13:26", "2013-03-27 05:58:53", "2013-03-28 08:41:41", "2013-03-28 10:47:01", "2013-03-29 02:17:26"))
cols <- c('start', 'end')
DT[, (cols) := lapply(.SD, as.POSIXct, format="%Y-%m-%d %T"), .SDcols=cols]