文字データとして読み込んだ上で定型的なフォーマットならymd()
とかymd_hms()
とかでtz = "Asia/Tokyo"
でほとんどどうにかなってしまう。
lubridate::ymd_hm("2015-11-09 14:35", tz = "Asia/Tokyo")
## [1] "2015-11-09 14:35:00 JST"
lubridate::ymd_hm("2015年11月9日 14時35分", tz = "Asia/Tokyo")
## [1] "2015-11-09 14:35:00 JST"
lubridate::parse_date_time(x, orders, tz = "Asia/Tokyo", locale = Sys.getlocale("LC_TIME"), ...)
が便利そう。
lubridate::quarter(x, with_year = TRUE, fiscal_start = 4)
とかかと思いきやlubridate::quarter(lubridate::ymd("2019-03-02"), with_year = TRUE, fiscal_start = 4)
は2018.04
になってほしいのに2019.04
が返って来るので使えない。%m-%
で月数を引き算してyear()
で取り出すのが良さそう。
library(lubridate)
##
## Attaching package: 'lubridate'
## The following object is masked from 'package:base':
##
## date
ymd("2016-02-29") %m-% months(3) %>%
year()
## [1] 2015
色々苦労する感じではあるが、lubridate
パッケージを用いた以下の方法で問題なさそう(閏年とか月の日数違いとか)。一応誕生日の前日24時に年齢が増えるので、2/29生まれだと閏年以外では3/1に年齢が増えることになるがみなし的に2/28にしていることも多そう。道路交通法とかも2/28みなしでの運用。
birthday <- c("2016-02-03", "2016-02-03", "1900-01-01", "2016-02-29", "2016-02-29", "2016-02-29")
day_of_surgery <- c("2017-02-02", "2017-02-03", "1999-12-31", "2017-02-28", "2017-03-01", "2020-02-29")
lubridate::time_length(lubridate::interval(
start = lubridate::ymd(birthday),
end = lubridate::ymd(day_of_surgery)
)
, unit = "year") %>%
base::trunc()
## [1] 0 1 99 0 1 4