我目前正在忙于构建一个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
答案 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
以对应有问题的更改。