根据单位的退出和进入时间每小时确定内容

时间:2018-03-20 08:40:30

标签: sql r tableau

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

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中做到这一点吗?也许以更顺畅的方式,只将列中的运行总计添加到第一个表?

1 个答案:

答案 0 :(得分:2)

希望这有帮助!

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))