2015-02-08 80 views
0

我正在尝试使分组的barplot发生故障。例如,如果我使用的是mtcars数据集,并且想用“vs”列(第8列)对所有内容进行分组,请查找所有剩余列的平均值,然后按组对其进行绘制。绘制数据框中每列的平均值/中值按因子分组

下面是我试图做的一个很差的例子,我知道这是不正确的。

理想情况下,mpg vs vs = 1 & 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)) 

回答

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