0

Rに次の表があります(クランヘルプデータシートに触発されました):

      > dfx <- data.frame(
        +   group = c(rep('A', 108), rep('B', 115), rep('C', 106)),
        +   sex = sample(c("M", "F","U"), size = 329, replace = TRUE),
        +   age = runif(n = 329, min = 18, max = 54)
        + )
      > head(dfx)
        group sex      age
        1     A   U 47.00788
        2     A   M 32.40236
        3     A   M 21.95732
        4     A   F 19.82798
        5     A   F 30.70890
        6     A   M 30.00830

エラーバーを含む棒グラフを使用して、各グループの男性 (M)、女性 (F)、および「不明」(U) のパーセンテージをプロットすることに興味があります。このグラフを作成するには、panel.ci/prepanel.ci コマンドを使用する予定です。

prop.table コマンドを使用して、各グループの比率テーブルを簡単に作成できます。

       > with(dfx, prop.table(table(group,sex), margin=1)*100)
               sex
         group        F        M        U
             A 29.62963 28.70370 41.66667
             B 35.65217 35.65217 28.69565
             C 37.73585 33.01887 29.24528

しかし今、エラーバーを含む同様のテーブルを作成し、これら 2 つのテーブルを使用して棒グラフを作成したいと考えています。可能であれば、ddply同様の目的で使用するコマンドを使用したいと思います(ただし、パーセンテージでも手段でもありませんでした)。

4

1 に答える 1

0

次のようなことを試してください:

library(plyr)
library(ggplot2)
summary(dfx) # for example, each variable
dfx$interaction <- interaction(dfx$group, dfx$sex)
ddply(dfx, .(interaction), summary) #group by interaction, summary on dfx
ggplot(dfx, aes(x = sex, y = age, fill = group)) + geom_boxplot()

ここで、グラフの作成に関する優れたオンライン チュートリアルを入手できます。

編集

エラーが発生するためには、比率に複数の値が必要になると確信しています。変数グループと性別の一意の組み合わせごとに、比率の値が 1 つだけ表示されます。

これが私がお手伝いできる最大限のことです (以下) が、適切な解決策を見つけたら、ご自身の質問に対する回答を投稿していただければ幸いです。

dfx$interaction <- interaction(dfx$group, dfx$sex)
dfx.summary <- ddply(dfx, .(group, sex), summarise, total = length(group)) 
dfx.summary$prop <- with(dfx.summary, total/sum(total))
dfx.summary
# group sex      prop
# 1     A   F 0.06382979
# 2     A   M 0.12158055
# 3     A   U 0.14285714
# 4     B   F 0.12462006
# 5     B   M 0.11854103
# 6     B   U 0.10638298
# 7     C   F 0.10334347
# 8     C   M 0.12158055
# 9     C   U 0.09726444
ggplot(dfx.summary, aes(sex, total, color = group)) + geom_point(size = 5) 
于 2013-05-29T11:46:13.430 に答える