我正在测量一个事件的持续时间,我想在每个观察日绘制事件的持续时间和时间。
我的数据集如下
> 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,但不完全是我正在寻找的东西。
非常感谢
答案 0 :(得分: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切换到(date-“less”)然后再返回到POSIX,保证在所有时间.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=".")