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] 1
interval(ymd('2021-12-21'),ymd('20221221'))/months(3)[1] 4
interval(ymd('2021-12-21'),ymd('20221221'))/weeks(1)[1] 52.14286
interval(ymd('2021-12-21'),ymd('20221221'))/days(1)[1] 365
14.1.3 年月提取
ymd('2021-12-21') %>% year()[1] 2021
ymd('2021-12-21') %>% month()[1] 12
ymd('2021-12-21') %>% week()[1] 51
ymd('2021-12-21') %>% day()[1] 21
14.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()