2017-11-01 12 views
0

電車に乗っていた人の数を示す2週間のデータフレームがあります。各観測は3つの値、日付、乗客の数、および曜日を含みます。先週から今週(月曜日〜月曜日、土曜日〜火曜日など)の各日の乗客を比較したいと思います。ここでは、データがある:ggplot2:各X値の複数のY値をプロットするためのデータの整形

structure(list(total = structure(c(17455, 17456, 17457, 17458, 
17459, 17460, 17461, 17462, 17463, 17464, 17465, 17466, 17467, 
17468), class = "Date"), passengers = c(9299L, 9166L, 10234L, 
10176L, 10098L, 2867L, 5416L, 9312L, 10555L, 10858L, 10169L, 
9515L, 2679L, 5490L), dow = c("Monday", "Tuesday", "Wednesday", 
"Thursday", "Friday", "Saturday", "Sunday", "Monday", "Tuesday", 
"Wednesday", "Thursday", "Friday", "Saturday", "Sunday")), .Names = 
c("total", "passengers", "dow"), class = "data.frame") 

(報告書を作成した自動化システムは、日付の用語「合計」を使用し、私はそれが混乱する可能性があるとして、それを指摘する必要性を感じました)。

Iはggplotを作成すると、それが唯一の代わりに並んで2辺の棒グラフ1つのy値をマッピング:私はこのようなインスタンスのデータを溶融するために使用される変形を見ている

ggplot(x, aes(x=dow, y=passengers), fill=variable) + 
    geom_bar(stat = "identity", position = "dodge") 

、しかしid.varsの値として曜日を使用して溶かすと、日付は科学的表記(小さな問題)に変換されますが、ggplotは乗客の変数(大きな問題)を見つけることができません。対処すべき

答えて

2

いくつかの問題:

  1. あなたがfill = variableを指定したが、あなたのデータフレームに「変数」という名前の変数がありません。
  2. 2つのドッジド・バーが並んでいることが予想されますが、ドッジングがどのように行われるかはわかりません。

    library(dplyr) 
    
    df <- x %>% 
        mutate(week = format(total, "%V"), 
         dow = factor(dow, levels = c("Monday", "Tuesday", "Wednesday", "Thursday", 
                 "Friday", "Saturday", "Sunday"))) 
    
    > head(df) 
         total passengers  dow week 
    1 2017-10-16  9299 Monday 42 
    2 2017-10-17  9166 Tuesday 42 
    3 2017-10-18  10234 Wednesday 42 
    4 2017-10-19  10176 Thursday 42 
    5 2017-10-20  10098 Friday 42 
    6 2017-10-21  2867 Saturday 42 
    

    これは、次の7日間、「週」第7値の値42をとる変数、及び43を追加:

Iは、第1のデータフレームを口論になります今週の月曜日から金曜日まで注文しています。

ggplot(df, 
     aes(x = dow, y = passengers, fill = week)) + 
    geom_col(position = "dodge") 

geom_col()geom_bar(stat = "identity")と同等ですが、あまりタイピングが必要です。

plot

+0

したがって、キーには2つの異なる週があることを示す識別子変数が追加されています。塗りつぶし値が指定されていない場合、これはやはり避けるか同じ問題が続くでしょうか? @Z.Lin – Brad

+1

@Brad比較を容易にするために異なる塗りつぶしの色を必要としない場合は、 'aes()'の中に 'group = total'を含めます。これはパッケージに、「合計」(つまり、毎日)の各値を1つのグループとして扱い、1日ごとに棒を取り除かせたいということを伝えます。識別子を指定しない場合、毎日のバーは同じ位置で重複します( 'geom_bar'の透過度を減らすことでこれを確認できます。例えば、' alpha = 0.5'を設定してください) –

+0

私のデータフレームを以前は週の列を追加していたので、グラフを作成できました。 (私はまだdplyrを学んでいませんでした)しかし、私のX値は別々にソートされていますので、グラフは金曜日、月曜日、土曜日になります。私はあなたが "レベル"引数をあなたがしたように命令したので、今週の曜日を順番に保った? @ Z.Lin – Brad

関連する問題