如您所见,我有一个显示区域进入和退出时间的数据集。 我想以小时为单位确定该区域的内容,最好是以某种方式在新列中使用相同的数据集,或者在新数据集中。以下是数据。
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中做到这一点吗?也许以更顺畅的方式,只将列中的运行总计添加到第一个表?
答案 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))