【问题标题】:How to calculate occupancy rate per hour?如何计算每小时的入住率?
【发布时间】:2020-02-21 15:21:54
【问题描述】:

我正在尝试计算 R 中每小时的占用率。为此,我需要一次会议的分钟数(开始时间和结束时间的差异)并将其除以 60 分钟乘以 100%。

当结束时间与开始时间不同时,我无法计算此时间。

例如: 会议是从 12.50 到 13.10,然后 R 说会议是 20 分钟(这是真的!),但我想每小时拆分一次。所以 10 分钟应该在 12.00-13.00 小时和 10 分钟在 13.00-14.00

                Start_Time            End_Time occupied Room_ID
    1  2019-09-02 09:03:00 2019-09-02 10:32:00        1    7820
    2  2019-09-02 10:35:00 2019-09-02 11:06:00        1    7820
    3  2019-09-02 11:29:00 2019-09-02 12:20:00        1    7820
    4  2019-09-02 12:42:00 2019-09-02 13:09:00        1    7820
    5  2019-09-02 14:07:00 2019-09-02 14:22:00        1    7820
    6  2019-09-02 14:22:00 2019-09-02 14:27:00        1    7820
    7  2019-09-02 14:56:00 2019-09-02 15:18:00        1    7820      

如果我使用 difftime(),它会在第一行存储 89 分钟,我想将其分开。我能做什么?

【问题讨论】:

标签: r date datetime time difftime


【解决方案1】:

仅对该数据使用基本 R 函数:

data <- data.frame(
  Start_Time = as.POSIXct(c("2019-09-02 09:03:00","2019-09-02 10:35:00","2019-09-02 11:29:00","2019-09-02 12:42:00","2019-09-02 14:07:00","2019-09-02 14:22:00","2019-09-02 14:56:00"),tz = "UTC"),
  End_Time = as.POSIXct(c("2019-09-02 10:32:00","2019-09-02 11:06:00","2019-09-02 12:20:00","2019-09-02 13:09:0","2019-09-02 14:22:00","2019-09-02 14:27:00","2019-09-02 15:18:00"),tz = "UTC"),
  Room_ID = 1)

解决方案可能是:

occupancy_rate <- function(data){
  agg <- do.call(rbind,lapply(1:nrow(data),function(i){
    times <- seq(data$Start_Time[i], data$End_Time[i], by = 60)
    aggregate(list(occ_mins=times),list(date_hour=strftime(times,"%y-%m-%d %H")), length)
  }))
  with(agg,aggregate(list(occ_mins=occ_mins), list(date_hour=date_hour), function(x) sum(x)/60*100))
}

产生:

occupancy_rate(data)
    date_hour occupancy_rate
1 19-09-02 10       95.00000
2 19-09-02 11       96.66667
3 19-09-02 12       63.33333
4 19-09-02 13       65.00000
5 19-09-02 14       16.66667
6 19-09-02 15       43.33333
7 19-09-02 16       31.66667

显然,如果数据集较大,您可能需要查看外部库,例如 data.tabledplyr

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    相关资源
    最近更新 更多