根据单元的进出时间每小时确定内容
Determining content every hour based on exit and entry times on units
如您所见,我有一个显示区域进入和退出时间的数据集。
我想按小时确定该区域的内容,最好是在具有新列的同一数据集中,或者在新数据集中。下面是数据。
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 年 00:00 年 1 月 1 日起的秒数。
这样做的目的是在 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
然后做出输出table:
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 中做这件事吗?也许以更顺畅的方式,这只会将列中的 运行 总数添加到第一个 table?
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))
如您所见,我有一个显示区域进入和退出时间的数据集。 我想按小时确定该区域的内容,最好是在具有新列的同一数据集中,或者在新数据集中。下面是数据。
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 年 00:00 年 1 月 1 日起的秒数。
这样做的目的是在 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
然后做出输出table:
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 中做这件事吗?也许以更顺畅的方式,这只会将列中的 运行 总数添加到第一个 table?
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))