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