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 行)分配一个带有年份的新列,但不包括年份行?
谢谢!
解决方案
我建议下一种方法来格式化你的数据,并完成一年的值。您的数据(我已定义为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()
输出:
推荐阅读
- c# - C# Selenium:ICapabilities 不再包含 BrowserName 的定义
- java - 如何从战争应用程序中获取 manifest.mf 文件
- javascript - 将文本文件读取到 jQuery 会返回“object Object”,而不是文本/字符串
- asp.net-core - .NET & Swagger 开始出现 401 错误
- google-colaboratory - 直接通过 Internet 将数据集导入 Google Colab
- javascript - 何时根据来自 redux 的数据更新本地反应状态?
- java - onLocationChanged() 方法没有被调用
- node.js - 为什么 NodeJS 需要一个链表结构来包含所有已注册的原生模块?
- webpack - 任何人都可以提供有效的 webpack4 和 Karma 配置吗?
- openstack - 任务配置无效:输入任务无效