我有停车位的进出时间。如何在给定的时间内找到停车位的利用情况?
这里是我的数据示例: sID是实际车辆的停车位号、进出时间。pID是用户ID
p_id sID entrytime exittime
40114 25 2013-11-18 15:49:27 2013-11-19 05:00:00
39173 58 2013-11-18 14:34:22 2013-11-19 05:00:00
12549 07 2013-11-18 13:55:13 2013-11-19 05:00:00
39475 48 2013-11-18 13:31:14 2013-11-19 05:00:00
12549 70 2013-11-18 10:35:56 2013-11-19 05:00:00
39173 99 2013-11-18 10:15:52 2013-11-19 05:00:00
12549 99 2013-11-18 10:02:06 2013-11-19 05:00:00
39909 76 2013-11-18 08:04:38 2013-11-19 05:00:00
39038 01 2013-11-15 15:47:13 2013-11-16 04:00:00
39807 91 2013-11-15 14:30:19 2013-11-16 02:30:19
40629 31 2013-11-19 08:13:42 2013-11-19 20:13:42
理想情况下,这将是我的输出,这将包括每小时(或30分钟)利用停车场跨越不同的停车日期。“No.parksUtilized”是指在特定时间使用的停车位数量。下表不是真实的数据,只是为了说明而已。
time No.parksUtilized
2013-11-15 08:00:00 13
2013-11-15 09:00:00 5
2013-11-15 10:00:00 9
谢谢!
发布于 2017-12-03 21:17:56
看起来,您的输出可能是基于比您在数据示例中显示的更多的数据。下面是一个如何进行的例子。
首先,以可用的形式设置示例数据:
library(tidyverse)
library(lubridate)
dat = read.table(text="
40114 25 2013-11-18 15:49:27 2013-11-19 05:00:00
39173 58 2013-11-18 14:34:22 2013-11-19 05:00:00
12549 07 2013-11-18 13:55:13 2013-11-19 05:00:00
39475 48 2013-11-18 13:31:14 2013-11-19 05:00:00
12549 70 2013-11-18 10:35:56 2013-11-19 05:00:00
39173 99 2013-11-18 10:15:52 2013-11-19 05:00:00
12549 99 2013-11-18 10:02:06 2013-11-19 05:00:00
39909 76 2013-11-18 08:04:38 2013-11-19 05:00:00
39038 01 2013-11-15 15:47:13 2013-11-16 04:00:00
39807 91 2013-11-15 14:30:19 2013-11-16 02:30:19
40629 31 2013-11-19 08:13:42 2013-11-19 20:13:42", header=FALSE, stringsAsFactors=FALSE)
names(dat) = c("p_id", "sID", "entrytime", "v1", "exittime", "v2")
dat = dat %>%
mutate(entrytime = ymd_hms(paste(entrytime, v1)),
exittime = ymd_hms(paste(exittime, v2))) %>%
select(-v1, -v2)
清点占用的空间:
times = seq(ymd_hms("2013-11-18 08:00:00"), ymd_hms("2013-11-18 18:00:00"), by="1 hour")
map_df(times, function(x) {
data.frame(timecheck=x,
Num_Occupied=sum(with(dat, between(x, entrytime, exittime))))
})
timecheck Num\_Occupied 1 2013-11-18 08:00:00 0 2 2013-11-18 09:00:00 1 3 2013-11-18 10:00:00 1 4 2013-11-18 11:00:00 4 5 2013-11-18 12:00:00 4 6 2013-11-18 13:00:00 4 7 2013-11-18 14:00:00 6 8 2013-11-18 15:00:00 7 9 2013-11-18 16:00:00 8 10 2013-11-18 17:00:00 8 11 2013-11-18 18:00:00 8
发布于 2017-12-03 21:18:03
我认为您刚刚向我们展示了您的部分数据,我并不完全理解您的最后一个表,但您可以将此作为问题的提示来处理。我会用包lubridate
来解决它。
package(lubridate)
df$entrytime <- ymd_hms(df$entrytime)
df$exittime <- ymd_hms(df$exittime)
interval <- interval(start = df$entrytime, end = df$exittime)
date <- ymd_hms("2013-11-15 15:00:00")
length(date %within% interval)
https://stackoverflow.com/questions/47623065
复制相似问题