r - 计算两个日期之间每天 "open hours"的数量

标签 r date

我有一个包含开始日期和结束日期的数据框,以及注册事件的人数。我想计算每一方在特定时间范围内(例如 07:00 - 17:00)出席的小时数

如果我使用以下示例 data.frame ...

d <- data.frame(startDate = c(as.POSIXct("2011-06-04 08:00:00"), as.POSIXct("2011-06-03 08:00:00"),
                          as.POSIXct("2011-09-12 10:00:00")),
            endDate = c(as.POSIXct("2011-06-06 11:00:00"), as.POSIXct("2011-06-04 11:00:00"),
                        as.POSIXct("2011-09-12 18:00:00")),
            partysize = c(124,442,323))
open <- "07:00"
close <- "17:00"

我希望我的结果集看起来像这样:
day                     numhours  partysize
2011-06-04                     9        124
2011-06-05                    10        124
2011-06-06                     4        124
2011-06-03                     9        442
2011-06-04                     4        442
2011-09-12                     7        323

注意: numhours 是日期在开盘和收盘时间之间的小时数

提前致谢,
--JT

最佳答案

对不起,它很乱,我用 7 和 17 而不是你的打开和关闭

app.days<-mapply(function(x,y){x+y*60*60*24},as.POSIXct(format(d$startDate,"%Y-%m-%d")),lapply(floor(-(d$startDate-d$endDate)/24),seq,from=0))
start.date<-mapply(function(x,y){pmax(x+7*60*60,y)},app.days,d$startDate)
end.date<-mapply(function(x,y){pmin(x+17*60*60,y)},app.days,d$endDate)
app.hours<-mapply(function(x,y){as.numeric(x-y)},end.date,start.date)
res<-mapply(function(x,y,z){data.frame(day=as.Date(x),numhours=y,partysize=z)},app.days,app.hours,as.list(d$partysize))
res1<-data.frame(day=as.Date(unlist(res[1,]),origin="1970-01-01"),numhours=unlist(res[2,]),partysize=unlist(res[3,]))

> res1
         day numhours partysize
1 2011-06-04        9       124
2 2011-06-05       10       124
3 2011-06-06        4       124
4 2011-06-03        9       442
5 2011-06-04        4       442
6 2011-09-12        7       323

基本上我们确定每个聚会规模停留的天数。对于给定的一天,我们找到适用的开盘价和收盘价。然后我们从收盘价中减去开盘价。数据框最终形成,但它可能是在 res<- 步骤中创建的.....

关于r - 计算两个日期之间每天 "open hours"的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11022988/

相关文章:

python - 如何计算 MATLAB 中不包括周末的时间戳之间的营业时间?

r - LME 模型中第 0 级、第 1 block 的反求解奇异性

r - 如何在 ubuntu 18.04 中安装 rstan

r - 使用 for 循环执行多个回归

javascript - 在 javascript 中,如何从日期字符串 "yyyy-mm-dd"或时间戳中提取月份?

r - 使用自定义标签函数在 ggplot 中标记 y 轴

MySQL:如何选择本周的记录?

java - 使用 Java 1.6 接收包含 ISO 8601 格式日期的字符串的 ParseException

r - 将 as.Date 应用于 R 中的 Excel 格式日期

linux - 如何在 Linux 中按日期获取最新的目录?