Составление сводной статистики - PullRequest
5 голосов
/ 07 марта 2011

Для следующего набора данных:

Genre   Amount
Comedy  10
Drama   30
Comedy  20
Action  20
Comedy  20
Drama   20

Я хочу построить линейный график ggplot2, где ось x равна Genre, а ось y - сумма всех сумм (условно наGenre).

Я пробовал следующее:

p = ggplot(test, aes(factor(Genre), Gross)) + geom_point()
p = ggplot(test, aes(factor(Genre), Gross)) + geom_line()
p = ggplot(test, aes(factor(Genre), sum(Gross))) + geom_line()

, но безрезультатно.

Ответы [ 2 ]

8 голосов
/ 07 марта 2011

Если вы не хотите вычислять новый фрейм данных перед построением графика, вы можете использовать stat_summary в ggplot2.Например, если ваш набор данных выглядит следующим образом:

R> df <- data.frame(Genre=c("Comedy","Drama","Action","Comedy","Drama"),
R+                  Amount=c(10,30,40,10,20))
R> df
   Genre Amount
1 Comedy     10
2  Drama     30
3 Action     40
4 Comedy     10
5  Drama     20

Вы можете использовать либо qplot с аргументом stat="summary":

R> qplot(Genre, Amount, data=df, stat="summary", fun.y="sum")

, либо добавить stat_summary кбазовая ggplot графика:

R> ggplot(df, aes(x=Genre, y=Amount)) + stat_summary(fun.y="sum", geom="point")
1 голос
/ 07 марта 2011

Попробуйте что-то вроде этого:

dtf <- structure(list(Genre = structure(c(2L, 3L, 2L, 1L, 2L, 3L), .Label = c("Action", 
"Comedy", "Drama"), class = "factor"), Amount = c(10, 30, 20, 
20, 20, 20)), .Names = c("Genre", "Amount"), row.names = c(NA, 
-6L), class = "data.frame")

library(reshape)
library(ggplot2)
mdtf <- melt(dtf)
cdtf <- cast(mdtf, Genre ~ . , sum)
ggplot(cdtf, aes(Genre, `(all)`)) + geom_bar()
...