Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
每天时间戳之间的差异,夜间休息时间为R_R_Dplyr_Timestamp_Data.table_Difftime - Fatal编程技术网

每天时间戳之间的差异,夜间休息时间为R

每天时间戳之间的差异,夜间休息时间为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

我试图计算两个时间戳之间的差异,并根据日期和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", "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]