【问题标题】:Determining content every hour based on exit and entry times on units根据单位的退出和进入时间,每小时确定一次内容
【发布时间】:2018-08-28 23:53:29
【问题描述】:

如您所见,我有一个数据集显示一个区域的进入和退出时间。 我想每小时确定这个区域的内容,最好是在同一数据集中以某种方式使用新列,或者在新数据集中。下面是数据。

ID      Arrival (sec)   Exit (sec)
7656    152845.085      155747.92
7657    152845.085      155784.91
7658    147617          150035.747
7659    152852.811      158216.428
7660    147617          150076.503

数据显示从 2000 年 1 月 1 日 00:00 开始的秒数。

这样做的目的是在 Tableau 中创建一个条形图,显示一周内每小时的内容。因此,R 和 SQL 是首选的程序语言。

所以,我尝试在 excel 中执行此操作,结果如下:

ID      Arrival (sec)   Exit (sec)  Arrival hour (int)  Exit(int)
7656    152845.085      155747.92   42                  43
7657    152845.085      155784.91   42                  43
7658    147617          150035.747  41                  41
7659    152852.811      158216.428  42                  43
7660    147617          150076.503  41                  41

然后制作输出表:

Hour    In  out Content Running total
41      2   2   0       0
42      3   0   3       3
43      0   3   -3      0
44      0   0   0       0

您能帮忙在 SQL 或 R 中执行此操作吗?也许以更平滑的方式,这只会将列中的运行总计添加到第一个表中?

【问题讨论】:

    标签: sql r tableau-api


    【解决方案1】:
    library(dplyr)
    library(tidyr)
    
    df %>%
      mutate(Arrival_hour_int = floor(Arrival_sec/3600),
             Exit_hour_int = floor(Exit_sec/3600)) %>%
      select(Arrival_hour_int, Exit_hour_int) %>%
      gather(Key, Hour) %>%
      group_by(Hour) %>%
      summarise(In = sum(Key=='Arrival_hour_int'),
                Out = sum(Key=='Exit_hour_int')) %>%
      mutate(Content = In - Out,
             Running_total = cumsum(Content)) %>%
      data.frame()
    

    输出为:

      Hour In Out Content Running_total
    1   41  2   2       0             0
    2   42  3   0       3             3
    3   43  0   3      -3             0
    

    样本数据:

    df <- structure(list(ID = 7656:7660, Arrival_sec = c(152845.085, 152845.085, 
    147617, 152852.811, 147617), Exit_sec = c(155747.92, 155784.91, 
    150035.747, 158216.428, 150076.503)), .Names = c("ID", "Arrival_sec", 
    "Exit_sec"), class = "data.frame", row.names = c(NA, -5L))
    

    【讨论】:

    • 谢谢 Prem - 有没有办法将小时作为日期值?如前所述,小时值是从 2000 年 1 月 1 日 00:00 开始的小时数。
    • 这个怎么样? library(lubridate); x &lt;- dmy_hm('01-01-2000 00:00'); x + hours(41)
    猜你喜欢
    • 2021-11-13
    • 2021-01-02
    • 2020-04-15
    • 1970-01-01
    • 2017-04-04
    • 2016-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多