如何在聚合(...,hist)命令中输入标题?

时间:2015-09-22 18:51:59

标签: r aggregate

我正在尝试使用适当的标题自动创建直方图。

 a <- c('aaa','bbb','ccc','aaa','bbb','ccc','aaa',
    'bbb','ccc','aaa','bbb','ccc','aaa','bbb','ccc');
 b <- rnorm(15,0,1);
 c <- data.frame(a,b);
regions<-sort(unique(a));

有没有办法在我的regions命令中输入aggregate(对象才能做我想要的事情?

我想象的另一个选择是使用split()使用循环和数据框列表,但我想避免使用它。

3 个答案:

答案 0 :(得分:2)

以下是两个ggplot解决方案

# create more interesting example
set.seed(1)   # for reproducibility
a <- rep(c('aaa','bbb','ccc'), each=100)
b <- rnorm(length(a),mean=rep(1:3, each=100))
c <- data.frame(a,b)

library(ggplot2)
ggplot(c, aes(x=b, fill=a, color=a)) + 
  geom_histogram(binwidth=0.5, position="identity", alpha=.5)

ggplot(c, aes(x=b, fill=a)) + 
  geom_histogram(binwidth=0.5, position="identity", color="grey70")+
  facet_grid(a~.)

答案 1 :(得分:1)

如果您正在尝试创建三个直方图,每个区域一个,适当标题,您可以使用sapply来避免显式编写循环。

# rename your data.frame c as df
colnames(df) <- c('region', 'val')
# filter your df by region, and create a title histogram
sapply(regions, function(x) hist(df[df['region'] == x, 2], main=x)

结果仍然需要一些爱,但这应该让你开始使用三个单独标题的直方图。

答案 2 :(得分:0)

这样的事情怎么样?

a <- c('aaa','bbb','ccc','aaa','bbb','ccc','aaa',
       'bbb','ccc','aaa','bbb','ccc','aaa','bbb','ccc');
b <- rnorm(15,0,1);
c <- aggregate(b,by=list(a),FUN=sum)
barplot(c$x, names.arg=c$Group.1,space = 0)