-2

イベントの期間を測定しています。期間と、各観測日のイベントが発生する時間をプロットしたいと思います。

私のデータセットは次のとおりです

> 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)に移動する必要があります。たとえば、データセットの2番目のエントリでは、(x = 12、y = 10:55:12)から(x = 12、y = 11:09:12)までの14分を示す黒いバーが必要です。 12日目のエピソード期間。エピソードは1日以上に及ぶ場合があります。

これはRで可能ですか?可能であれば、baseRソリューションのみを使用してください

似たようなものは、ggplot2を使用してx軸に日付をプロットし、y軸に時間をプロットすることですが、私が探しているものとは異なります。

どうもありがとう

4

1 に答える 1

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に戻すと、すべての時刻に同じ日付が存在することが保証されます。おそらく、origin引数を使用してそれを行うこともできます。

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=".")

ここに画像の説明を入力してください

于 2012-05-23T15:31:48.887 に答える