我有一个大型数据库 (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)
有什么建议?谢谢!
不确定这在当时是否可用,但 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 函数在创建会计季度和年度时改变您自己的列。
| 归档时间: |
|
| 查看次数: |
5033 次 |
| 最近记录: |