R:平均值与月份与流派的多个条形图

时间:2016-10-10 00:38:32

标签: r

我有以下数据框,其中变量是10种不同类型的电影,例如。戏剧,喜剧等。

    > head(grossGenreMonthLong)
       Gross ReleasedMonth variable value
5   33508485             2    drama     1
6   67192859             2    drama     1
8      37865             4    drama     1
9   76665507             1    drama     1
10 221594911             2    drama     1
12    446438             2    drama     1

可重复的数据框:

 dput(head(grossGenreMonthLong))
structure(list(Gross = c(33508485, 67192859, 37865, 76665507, 
221594911, 446438), ReleasedMonth = c(2, 2, 4, 1, 2, 2), variable = structure(c(1L, 
1L, 1L, 1L, 1L, 1L), .Label = c("drama", "comedy", "short", "romance", 
"action", "crime", "thriller", "documentary", "adventure", "animation"
), class = "factor"), value = c(1, 1, 1, 1, 1, 1)), .Names = c("Gross", 
"ReleasedMonth", "variable", "value"), row.names = c(5L, 6L, 
8L, 9L, 10L, 12L), class = "data.frame")

我想计算10种类型中每种类型的平均毛重与月份,并使用方面(根据类型)在单独的条形图中绘制它们。

换句话说,对于10种类型中的每种类型,可以快速绘制10个平均毛重与月份的条形图?

2 个答案:

答案 0 :(得分:1)

您应提供reproducible example,以便我们更方便地为您提供帮助。 dput(my.dataframe)是一种方法,或者您可以生成如下的示例数据框。既然你没有给我们一个可重复的例子,我将戴上我的心灵感应帽并假设你的截图中的“变量”栏是该类型。

n = 100
movies <- data.frame(
  genre=sample(letters[1:10], n, replace=T),
  gross=runif(n, min=1, max=1e7),
  month=sample(12, n, replace=T)
)
head(movies)
#   genre     gross month
# 1     e 5545765.4     1
# 2     f 3240897.3     3
# 3     f 1438741.9     5
# 4     h 9101261.0     6
# 5     h  926170.8     7
# 6     f 2750921.9     1

(我的类型是'a','b'等)。

要绘制每月平均总量,您需要计算每月的平均总量。一种这样的方法是使用plyr包(还有data.tabledplyr,...)

library(plyr)
monthly.avg.gross <- ddply(movies,          # the input dataframe
                           .(genre, month), # group by these
                           summarize, avgGross=mean(gross)) # do this.

数据框monthly.avg.gross现在每个(月份,流派)有一行,其中avgGross列的平均总数为(月,流派)。

现在这是一个密谋的问题。你暗示了“方面”所以我假设你正在使用ggplot。

library(ggplot2)
ggplot(monthly.avg.gross, aes(x=month, y=avgGross)) +
       geom_point() +
       facet_wrap(~ genre)

你可以做一些事情,比如添加月份标签,将月份视为一个因素而不是像这里的数字,但这是你问题的外围。

答案 1 :(得分:0)

非常感谢@ mathematical.coffee。我能够调整你的答案来制作合适的条形图。

meanGrossGenreMonth = ddply(grossGenreMonthLong,
                       .(ReleasedMonth, variable),
                       summarise,
                       mean.Gross = mean(Gross, na.rm = TRUE))

 # plot bar plots with facets
    ggplot(meanGrossGenreMonth, aes(x = factor(ReleasedMonth), y=mean.Gross)) 
+ geom_bar(stat = "identity") + facet_wrap(~ variable) +ylab("mean Gross ($)") 
+ xlab("Month") +ggtitle("Mean gross revenue vs. month released by Genre")