【问题标题】:How to "cut" Date by half month [closed]如何将日期“缩短”半个月[关闭]
【发布时间】:2015-11-28 03:04:34
【问题描述】:

函数“cut”提供了一种简单的方法来按“月”、“周”、“季度”切割日期数据,但我想按半个月切割日期数据。有没有简单的方法可以做到这一点?

【问题讨论】:

  • 当月有 31 天时,什么是“半月”?如果你能展示一个可重现的例子来说明你正在尝试做的事情,那就太好了。
  • 因缺乏明确性而关闭投票。
  • @RichardScriven 我投票支持“所有奇数天都是 A 的一半,偶数天是 B 的一半”

标签: r


【解决方案1】:

假设您指的是天文学意义上的半月,在这种情况下,1-15 天属于该月的前半个月,16+ 属于第二个月,连续的半个月由 A、B、C 表示。 .., Y(除了 I)然后创建一些测试数据x,然后计算其 POSIXlt 表示,以便我们可以选择年份(表示为自 1900 年以来的年数)、月份(表示为 0、1、.. ., 11) 和日期 (1, 2, 3, ...)。然后我们在LETTERS[-9] 中计算半个月的索引,并在其前面加上年份。请注意,这已经给出了一个分组向量,您根本不需要使用cut

x <- as.Date("2000-01-01") + seq(0, 100, 15) # test data
x
## [1] "2000-01-01" "2000-01-16" "2000-01-31" "2000-02-15" "2000-03-01"
## [6] "2000-03-16" "2000-03-31"

lt <- as.POSIXlt(x)
paste0(lt$year+1900, LETTERS[-9][2*lt$mon + 1 + (lt$mday > 15)])
## [1] "2000A" "2000B" "2000B" "2000C" "2000E" "2000F" "2000F"

请注意,未来 SO 问题应该有完整的示例,包括测试输入和预期输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-02
    • 1970-01-01
    相关资源
    最近更新 更多