将日期分成四分之一

时间:2017-11-03 13:09:40

标签: r

我目前正在忙于构建一个R脚本来格式化一些数据供以后使用。我想将日期分成几个部分并编写以下函数来执行此操作。

dates_to_quarters <- function(x){
    x <- as.numeric(month(x))

    x[x > 0 & x < 4 & is.na(x) == FALSE] <- "Q1"
    x[x >= 4  & x < 7 & is.na(x) == FALSE] <- "Q2"
    x[x >= 7 & x < 10 & is.na(x) == FALSE] <- "Q3"
    x[x >= 10 & x < 13 & is.na(x) == FALSE] <- "Q4"

    return(x)
}

我检查了NA值,因为我是R的新手,并且不知道它们在比较中的表现如何。请注意,x是使用anytime()函数格式化的日期向量。

在日期向量上使用上述功能后,几乎所有记录都具有正确的类。除了属于第三季度的那些。他们将月份的数量保留为一个值。

当我将Q1和Q2的前两个语句移动到其他语句之下时,代码可以正常工作。

我开始玩控制台并注意到,在仅执行Q1的语句后,使用Q3的布尔选择不再产生结果。之后我注意到“Q1”&gt; 7收益率为TRUE。

有人知道发生了什么事吗? (我可能已经猜到了,你是新的R)

编辑:

示例数据(传递给函数)

20-01-2017
20-04-2017
20-09-2017
20-12-2017

预期产出:

Q1
Q2
Q3
Q4

这就是我得到的:

Q1
Q2
9
Q4

1 个答案:

答案 0 :(得分:1)

1)yearqtr 将字符日期转换为"yearqtr"类,然后使用%q格式说明符对其进行格式化:

x <- c("20-01-2017", "20-04-2017", "20-09-2017", "20-12-2017") # input

library(zoo)

format(as.yearqtr(x, "%d-%m-%Y"), "Q%q")
## [1] "Q1" "Q2" "Q3" "Q4"

2)季度这不使用任何包:

quarters(as.Date(x, "%d-%m-%Y"))
## [1] "Q1" "Q2" "Q3" "Q4"

更新:修改后的输入x以对应有问题的更改。