R语言利器之ddply
ddply()函数位于plyr包,用于对data.frame举办分组统计,与tapply有些雷同
# 利用stringsAsFactors=F来防备data.frame把向量转为factor apache = data.frame(httpCode=c(200,200,200,404,404,500), time=c(100,111,210,10,10,500), api=c('index','index','logout','show','show','index'), stringsAsFactors=F)
统计每个api的请求数
ddply(apache,.(api),summarize,number=length(api)) api number 1 index 3 2 logout 1 3 show 2
统计每个api的各个httpCode的请求数:
a <- ddply(apache,.(api,httpCode),summarize,number=length(api)) api httpCode number 1 index 200 2 2 index 500 1 3 logout 200 1 4 show 404 2
下面这个巨大些,按照上面的统计功效a,统计每个api所占比例
b <- ddply(a, .(), .fun=function(x){ transform(x, percentage=with(x,ave(number,api,FUN=sum)/sum(number))) }) .id api httpCode number percentage 1 <NA> index 200 2 0.333 2 <NA> index 500 1 0.167 3 <NA> logout 200 1 0.167 4 <NA> show 404 2 0.333
这就是说你可以按照需要写本身的统计函数
用ggplot画api占比图
ggplot(b,aes(x=reorder(api,percentage),y=percentage,fill=factor(httpCode))) + geom_bar() + scale_y_continuous(labels = percent_format()) + coord_flip() +