2016-09-02 20 views
-1

私はデータフレームを持っています。私は2つのカテゴリ変数の間の関係に興味があります。タイプとロケーション、タイプは5レベル、ロケーションは20レベルです。2つのカテゴリ変数のR棒グラフ

それぞれの場所のタイプの割合をプロットする必要があります。 ggplot2を使用して簡潔な方法があるかどうかを知りたいですか?

私の場合はx軸での変数はので、私はまた、任意のヘルプが

EDITいただければ幸いです、スペースの問題に実行しています20個のレベルがあります。 より具体的な例:

df 
    gender beverage 
1 Female  coke 
2 Male  bear 
3 Male  coke 
4 Female  bear 
5 Male  tea 
6 Male  bear 
7 Female water 
8 Female  tea 
9 Female  bear 
10 Male  tea 

私はそれぞれの飲み物の性別賢明なパーセントをプロットしたいと思う 例:3人の茶飲み人が男性は2人、女性は1人で男性は66.67人、女性は33.33人になる したがってx軸はそこにお茶y = 66.67の2つの雄の雄で、y = 33.33の雌でなければなりません。

+0

あなたは[良い例]を含めるかどう便利な答えを得るためのチャンスは(はるかに高くなりますhttp://stackoverflow.com/questions/5963269)。 – Axeman

+0

私のデータはかなり大きいですし、私が提供したグラフのデータもありません。どのような例が役に立つかを明確にすることができれば、私が望むものを理解するのに十分なプロットではありません完了? –

+0

データの抜粋を使用するか、ランダムデータを作成するか、組み込みデータセットを使用してください(リンクを読んでください)。また、前処理を行うことができれば、そのコードを実際に表示すると便利です。 – Axeman

答えて

2

ジェンダー別にパーセンテージを計算する必要があるため、最も簡単な方法は前処理です。私はcompleteを使用して、data.frameに明示的に0パーセントのバーがあることを確認します。そうしないと、ggplotはそのバーを無視し、他の性別のバーを広げます。

library(dplyr) 
library(tidyr) 
df2 <- df %>% 
    group_by(gender, beverage) %>% 
    tally() %>% 
    complete(beverage, fill = list(n = 0)) %>% 
    mutate(percentage = n/sum(n) * 100) 

ggplot(df2, aes(beverage, percentage, fill = gender)) + 
    geom_bar(stat = 'identity', position = 'dodge') + 
    theme_bw() 

enter image description here

あるいは他の方法で回避:

df3 <- df %>% 
    group_by(beverage, gender) %>% 
    tally() %>% 
    complete(gender, fill = list(n = 0)) %>% 
    mutate(percentage = n/sum(n) * 100) 

ggplot(df3, aes(beverage, percentage, fill = gender)) + 
    geom_bar(stat = 'identity', position = 'dodge') + 
    theme_bw() 

enter image description here

+0

+1完全な部分です。実際にはこれは私が望むパーセンテージではない、あなたのプロットは、男性の20%が茶飲み家であることを私に伝えています。私が知りたいのは、茶飲酒者の66.67%が男性である、すなわち男性男性# 、これはより難しいと思われるので、どうすればいいですか? –

+0

これはなぜもう難しいのですか? 'group_by'に'飲み物 'と'性別 'を入れ替え、'完了 'で'飲み物 'を '性別'に置き換えてください。 – Axeman

関連する問題