在 R 中按季度和财政年度对数据进行分组的最有效方法

S_B*_*BRT 3 datetime r

我有一个大型数据库 (POY),其中包含 2011 年至 2017 年的数据,其中包含一个日期列。我需要做两件事:使按季度和按财政年度拆分成为可能。
不幸的是,我们的财政年度与日历年不同,而是从 7 月到 6 月。这也意味着我的第 1 季度从 7 月持续到 9 月。

我写了一些似乎工作正常但似乎相当冗长的代码(尤其是第二部分)。有没有人对这个初学者有任何建议以使其更有效率?

    #Copy of date column and splitting it in 3 columns for year, month and day
    library(tidyr)
    POY$Date2 <- POY$Date
    POY<-separate(POY, Date2, c("year","month","day"), sep = "-", convert=TRUE)


    #Making a quarter variable
    POY$quarter[POY$month<=3] <- "Q3"
    POY$quarter[POY$month>3 & POY$month <=6] <- "Q4"
    POY$quarter[POY$month>6 & POY$month <=9] <- "Q1"
    POY$quarter[POY$month>9 & POY$month <=12] <- "Q2"
    POY$quarter <- as.factor(POY$quarter)
Run Code Online (Sandbox Code Playgroud)

对于 Fiscal Year 变量:它运行 7 - 6 月,所以:
June'15 应该变成 FY1415
July'15 应该变成 FY1516
或者:2015 年的 Q1 和 Q2 应该变成 FY1516,而 2015 年的 Q3 和 Q4 实际上是 FY1415。

    #Making a FY variable 
    for (i in 1:nrow(POY)) {
        if (POY$quarter[i] == "Q1" | POY$quarter[i] == "Q2") {
        year1 <- as.character(POY$year[i])
        year2 <- as.character(POY$year[i] + 1)
      } else {
        year1 <- as.character(POY$year[i]- 1)
        year2 <- as.character(POY$year[i])
      }
      POY$FY[i] <- paste0("FY", substr(year1, start=3, stop=4),         substr(year2, start=3, stop=4))
    }
    POY$FY <- as.factor(POY$FY)
    summary(POY$FY)
Run Code Online (Sandbox Code Playgroud)

有什么建议?谢谢!

ORS*_*ent 6

不确定这在当时是否可用,但 lubridate 包包含一个季度功能,允许您创建会计季度和年度列。

文档在这里

您的案例的示例是:

x <- ymd("2011-07-01")
quarter(x)
quarter(x, with_year = TRUE)
quarter(x, with_year = TRUE, fiscal_start = 7)
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用 dplyr 和 paste 函数在创建会计季度和年度时改变您自己的列。