2017-03-17 18 views
0

私は、特定の駐車場の占有率を5週間の時間間隔で複数の期間にわたって示しています。次のように時刻と曜日の組み合わせによる時系列データのグループ化

私のデータが見えます:

head(DataParking) 
      DateTime OccupancyRate Weekday 
2017-01-27 10:24:41  0.2570423 Friday 
2017-01-27 10:29:41  0.2605634 Friday 
2017-01-27 10:34:41  0.2535211 Friday 
2017-01-27 10:39:41  0.2535211 Friday 
2017-01-27 10:44:41  0.2535211 Friday 
2017-01-27 10:49:41  0.2535211 Friday 

私は、全体の毎週のパターンを表示するために、平均稼働し、下限と上限値のプロットを作成したいと思います。したがって、私のデータは、曜日と曜日の組み合わせによってグループ化する必要があります。最後に

、私は次のように見えるように自分のデータを希望:

 Time Weekday AvgOccupancyRate MinOccupancyRate MaxOccupancyRate 
    10:24:41 Friday   0.2570423   0.1770423   0.3670423 
    10:29:41 Friday   0.2605634   0.1810423   0.3560423 
    10:34:41 Friday   0.2535211   0.1870423   0.3570423 
    10:39:41 Friday   0.2535211   0.1770423   0.3570423 
    10:44:41 Friday   0.2535211   0.1770423   0.3570423 
    10:49:41 Friday   0.2535211   0.1870423   0.3870423 

どのように私はこれを達成することができますか?

もう1つの質問:このデータを使用して、特定の日(たとえば金曜日)のデータをプロットすることができます。しかし、週曜のパターンを月曜日の00:00から日曜日の23:59までプロットしたい場合、WeekdayTimeコンビネーション変数を持つ必要があると思います。これは折れ線グラフのx軸にプロットすることができます。そのようなフォーマットが存在するかどうか、そして(例えば)ggplotを使ってx軸に平日 - 時間の組み合わせをプロットする方法はありますか?

事前に感謝します。

+3

:その後、プロットはのラインに沿って何かを使用するには

。 – Axeman

+1

時間を抽出する簡単な方法の1つは 'format(as.POSIXct(" 2017-01-27 10:24:41 ")、"%H:%M:%S ")'を使うことです。これは、論理的にソートする必要があります.0が1桁の先頭に追加されます(9:00:00は09:00:00になります)。私は、 'chron'パッケージには、よりインテリジェントに時間を格納する機能があると思います。 – lmo

+0

はい、私はDateTime変数から時刻を抽出する方法を知っています。しかし、私がこのようにすれば、私のデータは時間に基づいて集計することはできませんよね?変数内の '%H:%M:%S'の下に' as.POSIXct'を使用する場合、対応する日付はいつも平日に基づいて集計を妨げるかどうか? – Robert

答えて

0

。一度に一つの質問をしてください

library(ggplot2) 

ggplot(res, aes(Time, group = 1)) + 
    geom_line(aes(Time, AvgOccRate)) + 
    geom_line(aes(Time, MinOccRate), alpha = .5) + 
    geom_line(aes(Time, MaxOccRate), alpha = .5) 
+0

また、特定の平日/時間の組み合わせの最小値または最大値ではなく、95%信頼区間の上限および下限を計算することもできますか? – Robert

0

私はあなたの最初の質問に答えるだけです。

dplyrを使用すると、最初に時間と曜日を作成してから、簡単にsummariseを実行できます。データに異なる組み合わせがないため、これはテストされていません。

library(dplyr) 

df %>% 
    mutate(Time = format(DateTime, '%u %H:%M:%S')) %>% 
    group_by(Time, Weekday) %>% # Weekday is not really needed but can be clearer to read 
    summarize(AvgOccRate = mean(OccupancyRate), 
       MinOccRate = min(OccupancyRate), 
       MaxOccRate = max(OccupancyRate)) -> res 

ここで重要なのビットが、これは時間と曜日など%u%H:%M:%Sで新しい変数を作成format(DateTime, '%u %H:%M:%S')です:あなたはあなたが行うことができます必要なものをプロットするためにグループ化されたdata.frameを作成するには

library(dplyr) 

DataParking %>% 
    mutate(time = format(as.POSIXct(DateTime), "%H:%M:%S"),    # Thanks to @lmo 
     weekday = lubridate::wday(DateTime, label = TRUE)) %>% 
    group_by(time, weekday) %>% 
    summarise(AvgOccupancyRate = mean(OccupancyRate), 
      MinOccupancyRate = min(OccupancyRate), 
      MaxOccupancyRate = max(OccupancyRate)) %>% 
    select(-DateTime) 
関連する問題