2015-10-13 26 views
2

我希望問題標題有意義。我正在使用Google表單收集一些數據。表格總是在5點到7點之間提交,但在不同的日子。我想繪製x軸上時間戳的time組件與表單中的其他值。我希望確保所有時間圖都以時間戳的相同兩小時窗口(即5到7pm)結束,而不管時間戳的date分量。如何繪製獨立於一天的POSIXct對象/時間戳?

我已經下載的答覆爲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

我會用正則表達式演示demo [grepl(「1 [789](?=:\\ d {2} :)」,demo,perl = T)]''。但你可以嘗試使用'lubridate'或'chron'或另一種小時分鐘格式化方法。 –

回答

2

你可以嘗試獲取小時,分鐘取出使用lubridate,然後重新格式化回POSIXct。這將作爲POSIXct的默認原點是當前日期。

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

啊,這是完美的。這樣,我可以將我所有的時間轉換爲「今天」,並且它們都在相同的兩小時窗口中顯示出來。我有點生氣,我沒有想到這一點 - 非常感謝你的幫助! – Florian