2017-05-08 70 views
0

我有数据和一个情节,就像下面给出的例子。total_group_by总结值

我想要第三个“条件”,即给定年份和月份的条件A和条件B的总金额。我不知道该怎么做,因为条件包含在group_by声明中。特别是,我希望能够将它绘制在与下面显示的相同的图上(因此每年将显示总计的第三行)。

library(ggplot2) 
library(dplyr) 
data <- data.frame(Amount = sample(1:100, replace=T), 
       Condition = sample(c("A","B"), 100, replace=T), 
       Year = sample(2015:2017, 100, replace=T), 
       Month = sample(1:12, 100, replace=T)) 
dataGrouped <- data %>% 
       group_by(Year, Month, Condition) %>% 
       summarize(sumAmount = sum(Amount)) 
ggplot(dataGrouped, aes(x=Month, y=sumAmount, color=factor(Year), linetype=Condition)) + 
    geom_line(size=1) + scale_x_continuous(breaks = 1:12) 

enter image description here

我首先考虑做一个group_by(Year, Month),然后添加一个总数,但还是不知道什么方法是最好做到这一点(或者,如果有一个更好的选择)。

+0

不是你的情节有点太混乱了吗?主要是保持月份和年份的分离,还是可以连续进行时间表(即2015年1月至2017年12月)? –

+0

在这个示例数据中,它有点混乱。在我的实际数据中,条件A和B不会像这样重叠。无论如何,最好将它们放在同一图表上,以便比较给定月份和条件的年份之间的值。 – conor

回答

1

这是一个dplyr解决方案,按年份和月份总结总数,然后将其与条件值“总计”绑定到分组数据,以便ggplot()将在您的情节中将其作为一条新线条进行提取。

library(ggplot2) 
library(dplyr) 

data <- data.frame(Amount = sample(1:100, replace=T), 
        Condition = sample(c("A","B"), 100, replace=T), 
        Year = sample(2015:2017, 100, replace=T), 
        Month = sample(1:12, 100, replace=T)) 

dataGrouped <- data %>% 
    group_by(Year, Month, Condition) %>% 
    summarize(sumAmount = sum(Amount)) 

ggplot(dataGrouped, aes(x=Month, y=sumAmount, color=factor(Year), linetype=Condition)) + 
    geom_line(size=1) + scale_x_continuous(breaks = 1:12) 

dataWithTotal <- data %>% 
    group_by(Year, Month) %>% 
    summarize(sumAmount = sum(Amount)) %>% 
    mutate(Condition = 'Total') %>% 
    ungroup() %>% 
    rbind(ungroup(dataGrouped)) %>% 
    mutate(Condition = as.factor(Condition)) 

ggplot(dataWithTotal, aes(x=Month, y=sumAmount, color=factor(Year), linetype=Condition)) + 
    geom_line(size=1) + scale_x_continuous(breaks = 1:12) 
+0

这个答案和@Adam Quek都与我的数据一起工作,并且很有帮助。我已经选择了这个答案,因为它对我来说更加直观,并且不需要删除我的数据集中的其他列进行融化。 – conor

1

使用reshape2熔体和dcast改革用于数据操纵的宽幅(形成条件C):与

library(reshape2) 
data <- data %>% 
     mutate_at(vars(Condition, Year, Month), .funs= funs(as.factor)) 
dat <- melt(data) %>% 
     dcast(., Year + Month ~ Condition, sum) 
dat <- dat %>% 
     mutate(C = A + B) %>% 
     mutate(Month = as.numeric(as.character(Month))) 

形成长格式收集:

dat <- dat %>% 
     gather(Condition, Amount, A:C) 

简介:

ggplot(dat, aes(Month, Amount,color=factor(Year), linetype=Condition)) + 
     geom_line() + scale_x_continuous(breaks = 1:12) 

enter image description here