用lubridate加半个月

Adding half a month with lubridate

我想用 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 错误

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

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