如何绘制独立于日期的POSIXct对象/时间戳?

时间:2015-10-13 19:10:50

标签: r datetime plot posixct

我希望问题标题有意义。我正在使用Google表单收集一些数据。表格总是在下午5点到7点之间提交,但在不同的日期提交。我想在x轴上绘制时间戳的time分量与表单中的其他值。我想确保所有时间图都在图中相同的两小时窗口中(即5到7点之间)结束,而不管时间戳的date组成部分。

我已将回复下载为CSV,并且可以在没有任何问题的情况下读取时间戳:

demo <- as.POSIXct(demo$Timestamp, format="%m/%d/%Y %H:%M:%S")

数据看起来像这样:

> demo
 [1] "2015-10-12 17:02:42 CEST" "2015-10-12 17:02:46 CEST" "2015-10-12 17:02:46 CEST"
 [4] "2015-10-12 17:02:50 CEST" "2015-10-12 17:02:52 CEST" "2015-10-12 17:02:55 CEST"
 [7] "2015-10-12 17:02:58 CEST" "2015-10-12 17:03:02 CEST" "2015-10-12 17:03:09 CEST"
[10] "2015-10-12 17:03:15 CEST" "2015-10-12 17:03:22 CEST" "2015-10-12 17:03:24 CEST"
[13] "2015-10-12 17:03:36 CEST" "2015-10-12 17:03:48 CEST" "2015-10-12 17:04:07 CEST"
[16] "2015-10-12 17:09:20 CEST"

我可以使用这样简单的事情来绘制这些:

plot(demo, rnorm(length(demo)))

但我希望x轴上的范围是5-7pm,我需要确保所有数据都是在两小时范围内绘制的,与记录数据的那天无关。如果我做这样的事情:

startTime <- as.POSIXct("17:00:00", format="%H:%M:%S")
endTime <- as.POSIXct("19:00:00", format="%H:%M:%S")
plot(demo, rnorm(length(demo)), xlim=c(startTime, endTime), xaxt='n')
axis.POSIXct(1, at = seq(startTime, endTime, by="hour"), format = "%M", labels=c("17:00", "18:00", "19:00"))

我得到了正确的情节轮廓,但没有数据。这是因为startTimeendTime将设置为当前日期。如果我明确使用它们与demo ...

中的数据相同
startTime <- as.POSIXct("10/12/2015 17:00:00", format="%m/%d/%Y %H:%M:%S")
endTime <- as.POSIXct("10/12/2015 19:00:00", format="%m/%d/%Y %H:%M:%S")

......数据完全按照我希望的方式显示在情节中。

但是:我无法在任何其他日子添加数据点。有人可以向我解释如何操作/使用POSIXct对象去除他们的“日期”组件并将其绘制成同样的情节?

出于测试目的,您可以复制此向量以重现我在上面发布的代码:

demo <- as.POSIXct(c("2015-10-12 17:02:42 CEST", "2015-10-12 17:02:46 CEST", "2015-10-12 17:02:46 CEST", "2015-10-12 17:02:50 CEST", "2015-10-12 17:02:52 CEST", "2015-10-12 17:02:55 CEST", "2015-10-12 17:02:58 CEST", "2015-10-12 17:03:02 CEST", "2015-10-12 17:03:09 CEST", "2015-10-12 17:03:15 CEST", "2015-10-12 17:03:22 CEST", "2015-10-12 17:03:24 CEST", "2015-10-12 17:03:36 CEST", "2015-10-12 17:03:48 CEST", "2015-10-12 17:04:07 CEST", "2015-10-12 17:09:20 CEST"))

1 个答案:

答案 0 :(得分:2)

您可以尝试使用lubridate获取小时和分钟,然后重新格式化回POSIXct。这将作为POSIXct的默认原点是当前日期。

library(lubridate)
demo <- as.POSIXct(paste(hour(demo), minute(demo)), format = "%H %M")