R で chron パッケージでの年の計算
はじめに
R で日付データの取り扱いを悩んでいたところ、chron
というパッケージを見つけた。こちらの方がDate型やPOSIXct型より扱いが簡単そうなので、使ってみる。あるデータセットで扱うために、年/月/日付のデータから小数の年表示(例えば2021/3/1 -> 2021.164)と計算するような関数の作成を目指す。
※2021/03/03 計算間違いを修正した。
chron
での日付の扱い
以下、chron パッケージを用いた場合の年月日の扱いを書いていく。
> date_str <- "2021/03/01"
> dts <- dates(date_str, format = "y/m/d")
> dts
[1] 03/01/21
>
> #日付の足し算、引き算
> dts + 1
[1] 03/02/21
> dts - 1
[1] 02/28/21
>
> #日付の差分
> date_str2 <- "2021/03/15"
> dts2 <- dates(date_str2, format = "y/m/d")
> dts2 - dts
Time in days:
[1] 14
直感的に足し算、引き算が取り扱える。関数でうるう年の判定も可能
> #年を直接入力するとTRUE,FLASEが返ってくる。
> leap.year(2021)
[1] FALSE
> leap.year(2020)
[1] TRUE
>
> #日付をそのまま入れてもよい
> leap.year(dts)
[1] FALSE
>
日付から年、月、日をそれぞれ独立に取り出したい時は、
> mdy <- month.day.year(dts)
> mdy$year
[1] 2021
> mdy$month
[1] 3
> mdy$day
[1] 1
とすると、個別に扱える。
小数年を計算する関数
chron
を用いて小数年を計算する関数を作成した。
※日数を計算する所の修正を行った。
calc_year.R
library(chron)
calc_year <- function(date_str) {
dts <- dates(date_str, format = "y/m/d")
mdy <- month.day.year(dts)
date_str0 <- paste(mdy$year-1, "/12/31", sep = "")
dts0 <- dates(date_str0, format = "y/m/d")
if (leap.year(dts)) {
days <- 366
} else {
days <- 365
}
res <- mdy$year + (as.integer(dts - dts0))/days
return(res)
}
実際に動かしてみると、
> source("calc_year.R")
> calc_year("2021/3/1")
[1] 2021.164
となり、計算ができていることが分かる。
おわりに
今回は年月日のみ扱ったが、chron
では時刻も扱えるようであるので、それについても記事にしていきたい。
Author And Source
この問題について(R で chron パッケージでの年の計算), 我々は、より多くの情報をここで見つけました https://qiita.com/ryamamoto0406/items/085b4e5397274bb7abb1著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .