簡體   English   中英

同時編輯日期的月份和日期

[英]edit month and day of date simultaneously

我想修改日期的日期和年份,但是由於閏年,當我按順序執行這些操作時遇到了一些問題:

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)

Output:

# 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 class 同時更改“月”和“日”

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM