【问题标题】:Adding half a month with lubridate用 lubridate 加半个月
【发布时间】:2019-11-28 10:54:47
【问题描述】:

我想用 lubridate 添加半个月的多个步骤

for (i in range) {
  if(i%%2==1){
    day(dateseq[i]) <-  day(15)
  }
  if (i%%2==0) {
    dateseq[i] <- ceiling_date(dateseq[i-1], unit='month')
  }
}

但我认为应该有更有效的方法来做到这一点

编辑: 基本技术应该像这样工作

dateseq <- as_datetime(rep.int(ymd_hms("2016-11-01_3-50-23"),15))
range <- 1:15
for (i in range) {
  if(i%%2==1){
    day(dateseq[i]) <-  15
  }
  if (i%%2==0) {
    dateseq[i] <- ceiling_date(dateseq[i-1])
  }
}

所以它在下个月的 15 号和 1 号之间跳转 编辑:防止 R 错误

【问题讨论】:

  • 半个月不明确
  • 请附上一个可重现的示例以及预期的输出。
  • 我试图在编辑中澄清
  • 给定dateseq 的预期输出是多少?目前尚不清楚您要做什么。
  • 输出应该是一个递增的日期序列,从给定月份的 15. 开始,而不是跳到下个月的第一天,而不是跳到 15. 等等

标签: r date datetime lubridate


【解决方案1】:

这将是我没有循环的解决方案:

library(lubridate)

dateseq <- seq(from = ymd_hms("2016-11-01_3-50-23"),
               length.ou = 15, by = "months")

day(dateseq) <- rep(c(1,15), length(dateseq)/2+1)[1:length(dateseq)]

dateseq

这使得从 1 日开始交替一个月,下一个 15 日。

根据您的评论,我不确定您是否需要每月从 1 号开始和 15 号开始一次。在这种情况下,这应该有效:

dateseq <- sort(rep(seq(from = ymd_hms("2016-11-01_3-50-23"),
                        length.ou = 15, by = "months"),
                    2))

day(dateseq) <- rep(c(1,15), length(dateseq)/2+1)[1:length(dateseq)]

dateseq

【讨论】:

    猜你喜欢
    • 2011-08-01
    • 2021-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多