如何使用lubridate将日期时间数组中的年份修改为当前年份或指定年份2021?
用lubridate和dplyr修改日期时间的年份组件
针对你提出的两个日期处理需求,我结合你提供的测试数据,给出具体的实现方案:
需求1:把日期时间数组的年份替换为当前年份
我们可以借助lubridate的year()函数来读取和修改年份,搭配dplyr的mutate()更新数据框列。当前年份用year(Sys.Date())就能获取到:
library(lubridate) library(dplyr) # 你的测试数据 time <- ymd_hms(c("2018-01-05 12:00:15", "2018-01-01 02:00:15", "2018-02-25 12:00:15", "2018-04-15 12:00:15", "2020-10-15 12:00:15", "2019-10-20 12:00:15", "2019-11-15 12:01:15", "2018-11-02 11:00:15", "2018-07-09 02:00:15", "2020-10-02 11:00:15", "2020-01-29 12:00:15", "2019-03-15 12:00:15")) tbl <- tibble(time) # 修改为当前年份 tbl_current <- tbl %>% mutate(time = {year(time) <- year(Sys.Date()); time}) # 查看处理后的结果 print(tbl_current)
这里要注意,在mutate()里直接赋值需要用大括号包裹,确保赋值操作完成后返回修改后的time列。
需求2:将所有日期时间的年份统一改为2021
这个需求更简单,直接把年份固定为2021即可:
# 修改年份为2021 tbl_2021 <- tbl %>% mutate(time = {year(time) <- 2021; time}) # 查看结果 print(tbl_2021)
这样处理后,所有日期的月、日、时分秒都保持原样,只有年份被替换成2021。
小提示
lubridate的year()函数是双向操作:year(x)提取年份,year(x) <- new_year修改年份,非常适合这类需求。- 如果你的原始数据不是标准的日期时间类型,一定要先用
ymd_hms()(或对应格式的ymd()、mdy()等函数)转换成lubridate支持的日期时间对象,不然year()函数无法正常工作。
内容的提问来源于stack exchange,提问作者SiH
相关产品推荐
相关产品推荐

