14  最佳推荐-lubridate包

该包属于tidyverse组成之一,用于日期和时间处理

library(tidyverse) # or library(lubridate)

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='-'))
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))