如何替换R中日期对象中的日期?

如何替换R中日期对象中的日期?,r,dataframe,R,Dataframe,我想将R中日期对象中的不同日期替换为所有对象的同一天 让我们举个例子 date = structure(c(10961, 10990, 11018, 11046, 11060, 11088, 11116, 11144, 11214, 11235, 11249, 11263, 11305, 11354, 11382, 11423, 11452, 11480, 11494, 11508), class = "Date") [1] "2000-01-05"

我想将R中日期对象中的不同日期替换为所有对象的同一天

让我们举个例子

date = structure(c(10961, 10990, 11018, 11046, 11060, 11088, 11116, 
11144, 11214, 11235, 11249, 11263, 11305, 11354, 11382, 11423, 
11452, 11480, 11494, 11508), class = "Date")

 [1] "2000-01-05" "2000-02-03" "2000-03-02" "2000-03-30" "2000-04-13" "2000-05-11" "2000-06-08"
 [8] "2000-07-06" "2000-09-14" "2000-10-05" "2000-10-19" "2000-11-02" "2000-12-14" "2001-02-01"
[15] "2001-03-01" "2001-04-11" "2001-05-10" "2001-06-07" "2001-06-21" "2001-07-05"

我想得到:

 [1] "2000-01-05" "2000-02-05" "2000-03-05" "2000-03-05" "2000-04-05" "2000-05-05" "2000-06-05"
 [8] "2000-07-05" "2000-09-05" "2000-10-05" "2000-10-05" "2000-11-05" "2000-12-05" "2001-02-05"
[15] "2001-03-05" "2001-04-05" "2001-05-05" "2001-06-05" "2001-06-05" "2001-07-05"

我所做的是:


sub("%d", "05", date, perl = TRUE)

但是,它不起作用。我认为错误在
模式中,我不知道如何把握这一天

有人能帮我吗

谢谢

baser:

date <- as.Date(sub("\\d{2}$", "05", date))

您可以使用
lubridate
中的
floor_date()
将日期舍入到每月的第一天,再加上4

lubridate::floor_date(date, "month") + 4

#  [1] "2000-01-05" "2000-02-05" "2000-03-05" "2000-03-05" "2000-04-05"
#  [6] "2000-05-05" "2000-06-05" "2000-07-05" "2000-09-05" "2000-10-05"
# [11] "2000-10-05" "2000-11-05" "2000-12-05" "2001-02-05" "2001-03-05"
# [16] "2001-04-05" "2001-05-05" "2001-06-05" "2001-06-05" "2001-07-05"

如果将日期转换为
POSIXlt
对象,则可以更改其单个组件

date <- as.POSIXlt(date)
date$mday <- 5
as.Date(date)

# [1] "2000-01-05" "2000-02-05" "2000-03-05" "2000-03-05" "2000-04-05"
# [6] "2000-05-05" "2000-06-05" "2000-07-05" "2000-09-05" "2000-10-05"
#[11] "2000-10-05" "2000-11-05" "2000-12-05" "2001-02-05" "2001-03-05"
#[16] "2001-04-05" "2001-05-05" "2001-06-05" "2001-06-05" "2001-07-05"

date最简单的
lubridate::day(date)@RuiBarradas谢谢!我只尝试了day(),但找不到函数
day
是包
lubridate
中的函数。您需要在系统中安装该软件包。。所有答案(除了
cut
one)都可以根据您的情况轻松修改。
date <- as.POSIXlt(date)
date$mday <- 5
as.Date(date)

# [1] "2000-01-05" "2000-02-05" "2000-03-05" "2000-03-05" "2000-04-05"
# [6] "2000-05-05" "2000-06-05" "2000-07-05" "2000-09-05" "2000-10-05"
#[11] "2000-10-05" "2000-11-05" "2000-12-05" "2001-02-05" "2001-03-05"
#[16] "2001-04-05" "2001-05-05" "2001-06-05" "2001-06-05" "2001-07-05"