2012-05-20 256 views
-2

我正在測量事件的持續時間,並且我想繪製持續時間以及事件發生在每個觀察日的時間。事件的繪圖時間(x軸)和日期和持續時間(y軸)

我的數據集是以下

> str(question.stack) 
'data.frame': 398 obs. of 6 variables: 
$ id    : Factor w/ 1 level "AA11": 1 1 1 1 1 1 1 1 1 1 ... 
$ begin.recording : Factor w/ 1 level "8/15/2007": 1 1 1 1 1 1 1 1 1 1 ... 
$ begin.of.episode: Factor w/ 111 levels "1/1/2009","1/11/2009",..: 86 86 86 87 88 90 90 96 96 103 ... 
$ episode.day  : int 12 12 12 13 14 15 15 17 17 18 ... 
$ start.time  : Factor w/ 383 levels "0:06:01","0:17:12",..: 324 15 18 179 269 320 379 281 287 298 ... 
$ duration  : num 278 14 1324 18 428 ... 

我想在x軸的episode.day。 y軸應該從00:00到23:59:59(start.time)。例如,對於數據集的第二個條目,我想要一個從(x = 12,y = 10:55:12)開始直到(x = 12,y = 11:09:12)表示一個14分鐘的黑色條節目持續時間在第12天。節目可以跨越1天以上。

R這可能嗎?如果可能的話,請只baseR解決方案

類似的東西是Plot dates on the x axis and time on the y axis with ggplot2,但不是我正在尋找。

非常感謝

+1

你給它一個去? –

+0

我已經給它多了一個「去」,但我不能讓R在Y軸上與時間一起工作(我發現通常在R中的日期操作很困難),並且我無法看到在日期期間如何繪製事件更改。 – ECII

+1

這只是如果你顯示你已經嘗試過,那麼它更容易幫助。例如,如果問題出現的日期和您不擔心保持時間格式的數據,您可以隨時將其轉換爲簡單的數字,繪圖,然後使用如下方式更改yaxis實驗室:'axis(2,at = Value,標籤=粘貼(newlabs))' –

回答

2

好吧,我終於找到它了。

在x軸上,我想繪製日期作爲POSIXct或作爲記錄天數(整數)。在y軸上,我需要一天中的時間,以便圖形在每一天(x軸)和情節發生的時間(y軸)之間呈現一個黑條。

R可以繪製POSIX,但在我的案件情節的開始和結束時間(Y軸)應與日期「少」

我這樣做,這樣

#Cleaning the Dataset 
qs<-question.stack 
qs$id<-as.character(qs$id) 
qs$begin.recording<-as.character(qs$begin.recording) 
qs$begin.of.episode<-as.character(qs$begin.of.episode) 
qs$start.time<-as.character(qs$start.time) 
qs$start<-as.character(paste(qs$begin.of.episode,qs$start.time)) 
qs$duration<-round(qs$duration,0) 

#Convert time and dates to POSIXct 
qs$start<-as.POSIXct(qs$start,format="%m/%d/%Y %H:%M:%S",tz="UTC") 
qs$start<-round(qs$start,"mins") 
qs$end<-as.POSIXct(qs$start+qs$duration*60) 
qs$start<-as.POSIXct(qs$start) 

現在我們有

str(qs) 
'data.frame': 398 obs. of 8 variables: 
$ id    : chr "AA11" "AA11" "AA11" "AA11" ... 
$ begin.recording : chr "8/15/2007" "8/15/2007" "8/15/2007" "8/15/2007" ... 
$ begin.of.episode: chr "8/27/2007" "8/27/2007" "8/27/2007" "8/28/2007" ... 
$ episode.day  : int 12 12 12 13 14 15 15 17 17 18 ... 
$ start.time  : chr "6:15:12" "10:55:12" "11:15:12" "18:19:12" ... 
$ duration  : num 278 14 1324 18 428 ... 
$ start   : POSIXct, format: "2007-08-27 06:15:00" "2007-08-27 10:55:00" ... 
$ end    : POSIXct, format: "2007-08-27 10:53:00" "2007-08-27 11:09:00" ... 

下使一個載體,它包括所有分鐘,有一個小插曲。人們可以微調它秒或高檔小時

tmp<-do.call(c, apply(qs, 1, function(x) seq(from=as.POSIXct(x[7]), to=as.POSIXct(x[8]),by="mins"))) 

以下產生一個數據幀。將時間從POSIX切換到(日期 - 「較少」),然後返回到POSIX保證在time.of.day的所有時間都會有相同的日期。也許人們也可以用原始參數來做到這一點。

ep <- data.frame(sqs=tmp, date=as.Date(tmp,"%Y-%m-%d"),time.of.day=as.POSIXct(as.character(format(tmp,"%H:%M")),format="%H:%M")) 

情節

plot(ep$date, ep$time.of.day,pch=".") 

enter image description here