r-同时编辑日期的月份和日期

  • 本文关键字:日期 编辑 r lubridate
  • 更新时间 :
  • 英文 :


我想修改日期的日期和年份,但由于闰年的原因,当我按顺序执行这些操作时会遇到一些问题:

newDay = 5
newMonth = 2
dts = as.Date(c('2019-01-01', '2019-02-01', '2019-03-29'))
month(dts) = newMonth
day(dts) = newDay
# [1] "2019-02-05" "2019-02-05" NA 

有没有任何方法可以同时访问月份和日期,因此返回:

[1] "2019-02-05" "2019-02-05" "2019-02-05"

如果你不担心月份/日期,只需运行str_replace,你就可以了:

library(stringr)
dts <- as.Date(c('2019-01-01', '2019-02-01', '2019-03-29'))
print(dts)
library(stringr)
dts <- str_replace(dts, "-..-..", "-02-05")
print(dts)

输出:

# print(dts)
# "2019-01-01" "2019-02-01" "2019-03-29"
#
# print(dts)
# "2019-02-05" "2019-02-05" "2019-02-05"

base R中,我们可以使用POSIXlt类同时更改"月"one_answers"日">

f1 <- function(date, dy, mth) {
new_date <- unclass(as.POSIXlt(date))
new_date[c("mon", "mday")] <- list(rep(mth -1, length(date)), 
rep(dy, length(date)))
class(new_date) <- "POSIXlt"
as.Date(new_date)


}
f1(dts, 5, 2)
#[1] "2019-02-05" "2019-02-05" "2019-02-05"

实际上,您不需要真正并行地进行两个操作。代码的一个小变化是将线路交换为daymonth,例如

f <- function(dts, newM, newD) {
day(dts) <- newD
month(dts) <- newM
dts
}

你会看到

> f(dts, newMonth, newDay)
[1] "2019-02-05" "2019-02-05" "2019-02-05"
dts <- lubridate::make_date(year(dts), 2, 5)

最新更新