library(tidyverse) # or library(lubridate)14 最佳推荐-lubridate包
该包属于tidyverse组成之一,用于日期和时间处理
14.1 基本用法
14.1.1 字符串转日期
ymd('20221221','2023-12-21','2023/2/21','20/2/21')[1] "2022-12-21" "2023-12-21" "2023-02-21" "2020-02-21"mdy('12212022','12212023','12/21/2023','2/21/20')[1] "2022-12-21" "2023-12-21" "2023-12-21" "2020-02-21"14.1.2 时间间隔
interval(ymd('2021-12-21'),ymd('20221221'))/years(1)[1] 1interval(ymd('2021-12-21'),ymd('20221221'))/months(3)[1] 4interval(ymd('2021-12-21'),ymd('20221221'))/weeks(1)[1] 52.14286interval(ymd('2021-12-21'),ymd('20221221'))/days(1)[1] 36514.1.3 年月提取
ymd('2021-12-21') %>% year()[1] 2021ymd('2021-12-21') %>% month()[1] 12ymd('2021-12-21') %>% week()[1] 51ymd('2021-12-21') %>% day()[1] 2114.1.4 日期运算
ymd('2021-12-21')+days(365)[1] "2022-12-21"ymd('2021-12-21')+weeks(52)[1] "2022-12-20"ymd('2021-12-21')+months(12)[1] "2022-12-21"ymd('2021-12-21')+years(1)[1] "2022-12-21"14.2 实战应用
14.2.1 年龄计算
HIS系统住院数据模拟,计算就诊年月周,就诊年龄,住院天数
data<-data.frame(id=1:6,birth_date=paste(2021,1,1:6,sep='-'),
                 admit_date=paste(2023,5:10,6:1,sep='-'),
                 disch_date=paste(2023,5:10,6:11,sep='-'))
datadata %>%
  mutate(birth_date=ymd(birth_date),
         admit_date=ymd(admit_date),
         disch_date=ymd(disch_date),
         age=interval(birth_date,admit_date)/years(1),
         los=interval(admit_date,disch_date)/days(1)) %>%
  mutate(year=year(admit_date),
         month=month(admit_date),
         week=week(admit_date))14.3 基础包里的日期
c("%Y", "%y", "%m", "%B", "%b", "%d", "%A", "%a", "%H", "%I", "%M", "%S", "%p", 
  "%z", "%Z", "%j", "%U", "%W", "%c", "%x", "%X") %>%
  sapply(function(x){
    format(Sys.time(),x)
  }) %>% as.data.frame()