0

我在 R 中有下表(受 cran 帮助数据表的启发):

      > 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

但是现在,我想建立一个带有误差线的类似表格,并使用这两个表格制作条形图。如果可能的话,我想使用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 个比例值才能出现任何错误。对于变量组和性别的每个唯一组合,我只看到 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 回答