0

次のようなテーブルがあります。

> workingtime
         DATE TIME_START TIME_END    SHIFT
1  2013-06-04      00:00    08:00  noshift
2  2013-06-04      08:00    16:00       I0
3  2013-06-04      16:00    20:00 callduty
4  2013-06-04      20:00    22:30 overtime
5  2013-06-04      22:30    24:00 callduty
6  2013-06-05      00:00    07:00 callduty
7  2013-06-05      07:00    08:00 overtime
8  2013-06-05      08:00    16:00       I0
9  2013-06-05      16:00    20:00 callduty
10 2013-06-05      20:00    22:30 overtime
11 2013-06-05      22:30    24:00 callduty

私が必要としているのは、この投稿に似たプロットです: Plot time(x axis) and time of day & duration(y axis) of episodes

しかし:

  • x 軸に表示したい期間は 1 週間のみです
  • y 軸に沿って 1 日あたり 1 つの箱ひげ図 (曜日ごとに 1 つ) が存在する必要があります - 異なる色を表示します (稼働時間ごとに $SHIFT)
  • 結果は、カレンダーの週ビュー (iCal、Google カレンダーなど) に少し似ているはずです。
4

2 に答える 2

1

Rにはほとんどすべてのプリミティブがあるため、どのプロットでも、いつでも最初から実行できます。あなたの場合、私はまさにそのようにします。具体的には、日付変換ツールとpolygon関数を使用します。これは、時間を適切に処理しない超高速バージョンです。

workingtime$s <- as.numeric( gsub( ":.*", "", workingtime$TIME_START ) ) + as.numeric( gsub( ".*:", "", workingtime$TIME_START ) ) / 60
workingtime$e <- as.numeric( gsub( ":.*", "", workingtime$TIME_END ) ) + as.numeric( gsub( ".*:", "", workingtime$TIME_END ) ) / 60
plot( NULL, xlim= c( 0.5, 7.5 ), ylim= c( 24, 0 ), xaxt= "n", xlab= "Week", ylab= "Hour" )
axis( 1, at=seq( 0.5, 7.5 ), labels= rep( "", 8 ) )
workingtime$day <- as.numeric( factor( workingtime$DATE ) )
for( i in 1:nrow( workingtime ) ) { 
  x <- c( -0.5, 0.5, 0.5, -0.5 ) + workingtime[i, "day"]
  y <- rep( c( workingtime[i,"s"], workingtime[i,"e"] ), each= 2 )
  polygon( x, y, col= workingtime[i,"SHIFT"]  ) 
}

これはstrptimestrftimeとを使用することで大幅に改善される可能性がありas.Dateます。

于 2013-07-09T13:52:15.680 に答える
0

TeachingDemos パッケージのcal関数を使用して、現在のデバイスでカレンダーをプロットし、特定の日にプロットを追加できます。これにより、目的が達成される場合があります。1 か月全体ではなく 1 週間のみを表示する場合は、cal関数のコードを変更して、必要な週のみを表示することができます。

于 2013-07-09T14:09:28.137 に答える