我有以下数据框,其中变量是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个平均毛重与月份的条形图?
答案 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.table
,dplyr
,...)
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")