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.frame(id=1:6,birth_date=paste(2021,1,1:6,sep='-'),
dataadmit_date=paste(2023,5:10,6:1,sep='-'),
disch_date=paste(2023,5:10,6:11,sep='-'))
data
%>%
data 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))