【问题标题】:Convert YYYY-MM-DD to YYYY-YY Qx in R在 R 中将 YYYY-MM-DD 转换为 YYYY-YY Qx
【发布时间】:2018-07-20 00:32:52
【问题描述】:

我正在尝试按季度绘制数据,然后在 ggplot 中显示。 dataset 中的日期格式为 YYYY-MM-DD,我希望 ggplot x 轴显示财政年度,如 YYYY-YY Qx。财政年度从 7 月 1 日开始。

数据为长格式。这是我必须要去的地方:

      Data set named: TOX

TREE_ID    PM_Date                        variable value
1: 2013000584 2013-04-02               elm           0
2: 2013000498 2013-06-11               elm           1
3: 2013000123 2013-09-03               maple         0
4: 2013000642 2014-02-15               maple         0
5: 2013000778 2016-07-08               maple         1

PM_Dateq <- as.yearqtr(TOX$PM_Date, format)

Tox_longer_yr <- TOX [,list(value=sum(value)), by=list(PM_Dateq, variable)]

ggplot(Tox_longer_yr, aes(x = PM_Dateq, y = value, colour = variable)) 
+ geom_line()      

X 轴当前显示为:

2015, 2016, 2017...etc 

(虽然它在 ggplot 中被正确地分组。)

我希望 x 轴看起来像:

2015-16 Q3, 2015-16 Q4, 2016-17 Q1, 2016-17 Q2...etc

因此,2016-02-13 发生的事件将被归类为“2015-16 Q3”。

【问题讨论】:

  • 请编辑您的帖子以包含可重现的示例数据和您的代码尝试。
  • 看看here.

标签: r date ggplot2


【解决方案1】:

这样的事情怎么样。

library(lubridate)
df %>%
    mutate(
        PM_Date = as.Date(PM_Date),
        Qtr = sprintf("%s-%s Q%i",
            year(PM_Date),
            year(PM_Date %m+% years(1)),
            cut(
                month(tmp$PM_Date),
                breaks = c(0, 3, 6, 9, 12),
                labels = c("Q3", "Q4", "Q1", "Q2")))) %>%
    group_by(Qtr, variable) %>%
    summarise(value = sum(value)) %>%
    ggplot(aes(x = Qtr, y = value, colour = variable, group = variable)) +
    geom_line()

解释:我们通过从PM_Date 中提取年份并使用cut 从7 月1 日开始将月份分成3 个月的bin,以YYYY-YYYY QX 的形式构造一个新的Qtr 变量。我们使用lubridate 来轻松提取年份和“日期算术”(对于第二个YYYY,我们将当前年份加一年)。


样本数据

df <- read.table(text =
    "TREE_ID    PM_Date                        variable value
2013000584 2013-04-02               elm           0
2013000498 2013-06-11               elm           1
2013000123 2013-09-03               maple         0
2013000642 2014-02-15               maple         0
2013000778 2016-07-08               maple         1", header = T)

【讨论】:

  • 感谢您的帮助。它运行,但数据未正确分组。例如,2016-11-03 的事件被放入 2016-2017 Q4,而它应该进入 2016-2017 Q2。是否也可以将日期设为 2016-17 - 即第二次没有“20”?
  • @epiR 我无法确认; "2016-11-03" 变为 "2016-2017 Q2"。您可以编辑您的问题以更新您的示例数据吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-25
  • 1970-01-01
  • 2016-06-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多