我希望问题标题有意义。我正在使用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"))
我得到了正确的情节轮廓,但没有数据。这是因为startTime
和endTime
将设置为当前日期。如果我明确使用它们与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"))
答案 0 :(得分:2)
您可以尝试使用lubridate获取小时和分钟,然后重新格式化回POSIXct。这将作为POSIXct的默认原点是当前日期。
library(lubridate)
demo <- as.POSIXct(paste(hour(demo), minute(demo)), format = "%H %M")