绘制按因子分组的数据框中每列的平均值/中值

时间:2015-02-08 04:48:14

标签: r plot ggplot2

我正在尝试制作一个分组的条形图,但我遇到了麻烦。例如,如果我使用mtcars数据集并且我想按“vs”列(col#8)对所有内容进行分组,请找到所有剩余列的平均值,然后按组绘制它们。

以下是我正在尝试做的一个非常糟糕的例子,我知道这是不正确的。

理想情况下,vs = 1&的mpg vs = 0将并排,然后是cyl的并排,等等。我不关心是否跳过dyplr聚合或使用ggplot或者即使不需要聚合步骤...只是寻找一种方法,因为它让我发疯。

df = mtcars
agg = aggregate(df[,-8], by=list(df$vs), FUN=mean)
agg
barplot(t(agg), beside=TRUE, col=df$vs))

1 个答案:

答案 0 :(得分:2)

尝试

library(ggplot2)
library(dplyr)
library(tidyr)
df %>% 
    group_by(vs=factor(vs)) %>%
    summarise_each(funs(mean)) %>% 
    gather(Var, Val, -vs) %>%
    ggplot(., aes(x=Var, y=Val, fill=vs))+
    geom_bar(stat='identity', position='dodge')

enter image description here

或使用base R

 m1 <- as.matrix(agg[-1])
 row.names(m1) <- agg[,1]
 barplot(m1, beside=TRUE, col=c('red', 'blue'), legend=row.names(m1))

enter image description here