2016-05-03 7 views
-1

どのように私は次のようにデータを構築することができますvarggplot溶融およびプロット

の異なるレベルごとに性別内の割合を示す棒グラフをプロットします:

structure(list(var = structure(c(5L, 5L, 5L, 6L, 5L, 4L, 5L, 
6L, 6L, 6L, 5L, 5L, 5L, 6L, 6L, 5L, 6L, 5L, 6L, 5L), .Label = c("-97:\nMultiple\nResponse", 
"-99:\nRefused", "1:\nDefinitely", "2:\nProbably", "3:\nProbably\nnot", 
"4:\nDefinitely\nnot"), class = "factor"), GENDER = structure(c(1L, 
2L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 1L, 
1L, 2L, 1L), .Label = c("1: Male", "2: Female", "3: Unknown"), class = "factor")), .Names = c("var", 
"GENDER"), row.names = c(NA, 20L), class = "data.frame") 

I genderのバーをそれぞれ100%にする

答えて

1

varの各レベル内でGENDERによってパーセントを取得するためにデータを要約します。以下、私はdplyrを使って、ggplotの呼び出しの中でそれを実行します。

library(dplyr) 
library(scales) 

ggplot(dat %>% group_by(var, GENDER) %>% 
     tally %>% 
     mutate(pct=n/sum(n)), aes(var, pct, fill=GENDER)) + 
    geom_bar(stat="identity") + 
    scale_y_continuous(labels=percent_format()) 

enter image description here

UPDATE:は空のカテゴリが含まれていることを確認するには、次の

ggplot(dat %>% group_by(var, GENDER) %>% 
     tally %>% 
     mutate(pct=n/sum(n))) + 
    geom_bar(stat="identity", aes(var, pct, fill=GENDER)) + 
    scale_y_continuous(labels=percent_format()) + 
    scale_x_discrete(drop=FALSE) 
+0

これは非常にうまく機能していない私はあなたのデータフレームdat呼ばれてきました。最初のレベルはありません。それぞれの応答カテゴリは100%になります。 – vashts85

+0

いくつかのレベルは、提供したデータのサンプルに存在しないため、欠落しています。棒グラフを100%に集計すると、varの値ごとに棒グラフが100%になるように質問していたようでした。私が誤解した場合、どのようにデータをグループ化するか説明してください。 – eipi10

+0

実際、あなたのワークフローは本当にうまくいっています。ちょっと時間がかかりました。どのようにして 'var'のすべての値が表示されるように少し順序を変えるのでしょうか?ここに私が試したものですが、それは存在しない 'var'の値の一部が省略されています。 ggplot(DAT%>%GROUP_BY(GENDER、VAR)%>% タリー%>% 変異させますgeom_bar(stat = "identity"、position = "dodge")+ scale_y_continuous(labels =%_format())+ scale_x_discrete(drop = FALSE) – vashts85

関連する問題