Rで解析:日付けデータ操作の決定版「lubridate」パッケージ

Rの解析に役に立つ記事

日付けデータの操作に大変便利なパッケージの紹介です。データの変更や、丸めや近似値の取得、基準値からの配列作成など大変便利なコマンドが収録されています。

本パッケージで日付に関するほとんどの操作が可能だと思います。

パッケージバージョンは1.8.0。windows 11のR version 4.1.3で確認しています。

スポンサーリンク

パッケージのインストール

下記、コマンドを実行してください。

#パッケージのインストール
install.packages("lubridate")

実行コマンド

詳細はコメント、パッケージのヘルプを確認してください。

#パッケージの読み込み
library("lubridate")

#文字列が年月日の場合:ymdコマンド
#タイムゾーンを指定:tzオプション
Result <- ymd("22/05/01", tz = "Asia/Tokyo")
#内容確認
Result
#[1] "2022-05-01 JST"
#class確認
class(Result)
#[1] "Date"
########


#タイムゾーンの変更:with_tzコマンド
changeTZ <- with_tz(Result, "America/Chicago")
#確認
changeTZ
#[1] "2022-04-30 10:00:00 CDT"
########


#文字列が月日年の場合:mdyコマンド
mdy("05-01-22", tz = "Asia/Tokyo")
#[1] "2022-05-01 JST"
########


#文字列が日月年の場合:dmyコマンド
dmy("01-05-2022", tz = "Asia/Tokyo")
#[1] "2022-05-01 JST"
########


#時間付きの日付けデータを作成:XXX_hmsコマンド
#XXX_hmsには「ymd_hms」,「mdy_hms」,「dmy_hms」
#年月日時分秒の並び順で使い分ける
#TimeZoneの初期値は協定世界時
mdy_hms("05-01-22 0:07:30")
#[1] "2022-05-01 00:07:30 UTC"

#タイムゾーンを指定:tzオプション
#日本時間へ変更
mdy_hms("05-01-22 0:07:30", tz = "Asia/Tokyo")
#[1] "2022-05-01 00:07:30 JST"
########


###年月日時分秒の変更#####
#例の作成
TestHMS <- mdy_hms("22-05-01 0:07:30", tz = "Asia/Tokyo")

#秒を操作:secondコマンド
second(TestHMS) <- 10
#確認
TestHMS
#[1] "2022-05-01 00:07:10 JST"

#分を操作:minuteコマンド
minute(TestHMS) <- 10
#確認
TestHMS
#[1] "2022-05-01 00:10:10 JST"

#時を操作:hourコマンド
hour(TestHMS) <- 10
#確認
TestHMS
#[1] "2022-05-01 10:10:10 JST"

#日を操作:dayコマンド
day(TestHMS) <- 10
#確認
TestHMS
#[1] "2022-05-10 10:10:10 JST"

#月を操作:monthコマンド
month(TestHMS) <- 10
#確認
TestHMS
#[1] "2022-10-10 10:10:10 JST"

#年を操作:yearコマンド
#year(TestHMS) <- 10
#確認
TestHMS
#[1] "0010-10-10 10:10:10 LMT"

#例えば日を取得
#その他コマンドも取得可能
day(TestHMS)
#[1] 10
########


#日付けデータから曜日を求める:wdayコマンド
#文字データで結果を取得:labelオプション
#曜日の省略表記:abbrオプション;TRUE/FALSE
wday(Result, label = TRUE, abbr = FALSE, locale = "Japanese_Japan.932")
#[1] 日
#Levels: 日 < 月 < 火 < 水 < 木 < 金 < 土
#英語で取得:localに"English_Japan.932"を指定
wday(Result, label = TRUE, abbr = TRUE, locale = "English_Japan.932")
#[1] Sun
#Levels: Sun < Mon < Tue < Wed < Thu < Fri < Sat
########

#指定した日付けデータから月のみ異なる配列を作成:monthsコマンド
Result + months(0:5)
#[1] "2022-05-01" "2022-06-01" "2022-07-01" "2022-08-01" "2022-09-01" "2022-10-01"
########


#指定した日付けの丸め、近似を取得:round_date,floor_date,ceiling_dateコマンド
#データの種類を指定:unitオプション;
#"second","minute","hour","day","week","month","year","quarter"が指定可能
#例えばfloor_dateコマンド
UnitVec <- c("second", "minute", "hour", "day", "week", "month", "year", "quarter")
for(i in seq(UnitVec)){
  
  print(paste0("unit = ", UnitVec[i]))
  print(floor_date(mdy_hms("05-01-22 0:07:15", tz = "Asia/Tokyo"),
                   unit = UnitVec[i]))
  
}
#[1] "unit = second"
#[1] "2022-05-01 00:07:15 JST"
#[1] "unit = minute"
#[1] "2022-05-01 00:07:00 JST"
#[1] "unit = hour"
#[1] "2022-05-01 JST"
#[1] "unit = day"
#[1] "2022-05-01 JST"
#[1] "unit = week"
#[1] "2022-05-01 JST"
#[1] "unit = month"
#[1] "2022-05-01 JST"
#[1] "unit = year"
#[1] "2022-01-01 JST"
#[1] "unit = quarter"
#[1] "2022-04-01 JST"
########


#インターバルデータの作成:intervalコマンド
IntervalData <- interval(start = ymd("22/05/01", tz = "Asia/Tokyo"),
                         end = ymd("22/06/01", tz = "Asia/Tokyo"))
#確認
IntervalData
#[1] 2022-05-01 JST--2022-06-01 JST
########


###インターバルデータの操作#####
#開始日付の取得:int_startコマンド
int_start(IntervalData)
#[1] "2022-05-01 JST"

#終了日付の取得:int_endコマンド
int_end(IntervalData)
#[1] "2022-06-01 JST"

#開始と終了の日付を入れ替える:int_flipコマンド
int_flip(IntervalData)
#[1] 2022-06-01 JST--2022-05-01 JST

##データをduration classに変換して期間を計算
#変換:as.durationコマンド
TestDuration <- as.duration(IntervalData)
#確認
TestDuration
#[1] "2678400s (~4.43 weeks)"
#期間日数
as.numeric(TestDuration, "days")
#[1] 31

#日付の操作:int_shift,durationコマンド
#durationで操作できる情報
#year,month,days,hour,minute,second
int_shift(IntervalData, duration(days = -11, minute = 1.5,
                                 month = 7, year = 1))
#[1] 2023-11-19 07:31:30 JST--2023-12-20 07:31:30 JST
########

少しでも、あなたの解析が楽になりますように!!

タイトルとURLをコピーしました