我有一个看起来像这样的数据框:
数据框:
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行),但不包括年行?
谢谢!
答案 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()
输出: