需要帮助按年份和区分月份对行进行分组

时间:2020-09-06 23:22:32

标签: r

我有一个看起来像这样的数据框:

数据框:

Date    Revenue   
2009      15       
dec       15       
2010      450       
jan       13       
feb       14       
mar       14       
apr       10       
may       10       
jun       31       
jul       99    
aug       43  
sep       87 
oct       32  
nov       54     
dec       43
2011      67

并且将以相同的模式持续几年,直到2019年。包含年份的行代表该年的总收入。 2009年是仅包含一个数据点(12月)的唯一年份。

数据框来自从excel导入的数据透视表,该数据透视表每年进行分组。

每个月与年份在同一列中,不同年份的月份没有区别。我需要绘制一个折线图,其中包含每年的每月收入(即,不同年份的几条线逐月显示收入),但是我无法区分不同年份的月份这一事实不允许我这样做。

如何按年份将月份分组?还是给新列指定年(确定的间隔)(即每12行),但不包括年行?

谢谢!

1 个答案:

答案 0 :(得分:0)

我建议您采用下一种格式化数据并完成年份值的方法。您的数据(我将包含的输出定义为df)具有Date变量具有混合的数字和字符值的功能。我添加的代码根据类型创建了一个新变量,以提取年份。之后,将填写缺少的行以完全标识年份组。最后,将其绘制成草图。您只有2009年的一个值,所以看不到它,而对于2011年,只有关于总计的信息。有了您的全部数据,您将拥有所有年份的完整图像。这里是一种tidyverse的方法:

library(tidyverse)
#Data
df <- structure(list(Date = c("2009", "dec", "2010", "jan", "feb", 
"mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", 
"dec", "2011"), Revenue = c(15L, 15L, 450L, 13L, 14L, 14L, 10L, 
10L, 31L, 99L, 43L, 87L, 32L, 54L, 43L, 67L)), class = "data.frame", row.names = c(NA, 
-16L))

代码:

#Code
df %>% mutate(Var=ifelse(is.na(as.numeric(Date)),NA,as.numeric(Date))) %>%
  fill(Var) %>%
  #filter years in date to exclude big totals
  filter(is.na(as.numeric(Date))) %>%
  #Add order to levels
  mutate(Date=factor(Date,levels = c("jan","feb","mar","apr","may",
                                     "jun","jul","aug","sep","oct",
                                     "nov","dec"),ordered=T)) %>%
  #Finally plot
  ggplot(aes(x=Date,y=Revenue,group=factor(Var),color=factor(Var)))+
  geom_line()+
  theme_bw()

输出:

enter image description here