【问题标题】:Binning a Date into quarters将日期分成四等份
【发布时间】:2017-11-03 21:29:22
【问题描述】:

我目前正忙于构建一个 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”> 7 产生 TRUE。

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

编辑:

示例数据(传递给函数)

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

预期输出:

Q1
Q2
Q3
Q4

这就是我得到的:

Q1
Q2
9
Q4

【问题讨论】:

  • 请提供一个小型数据集,我们可以在其上运行您的函数。您也可以使用cut 函数。
  • 你能发布一些你得到的与你期望得到的样本输入和输出吗?在此处查看更多信息:stackoverflow.com/questions/5963269/…
  • 请点击@Marwaha提供的链接,并以易于粘贴的形式提供数据。
  • 我提供了一些示例数据

标签: r


【解决方案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 以对应有问题的更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多