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")
#&#20869;&#23481;&#30906;&#35469;
Result
#[1] "2022-05-01 JST"
#class&#30906;&#35469;
class(Result)
#[1] "Date"
########


#&#12479;&#12452;&#12512;&#12478;&#12540;&#12531;&#12398;&#22793;&#26356;:with_tz&#12467;&#12510;&#12531;&#12489;
changeTZ <- with_tz(Result, "America/Chicago")
#&#30906;&#35469;
changeTZ
#[1] "2022-04-30 10:00:00 CDT"
########


#&#25991;&#23383;&#21015;&#12364;&#26376;&#26085;&#24180;&#12398;&#22580;&#21512;:mdy&#12467;&#12510;&#12531;&#12489;
mdy("05-01-22", tz = "Asia/Tokyo")
#[1] "2022-05-01 JST"
########


#&#25991;&#23383;&#21015;&#12364;&#26085;&#26376;&#24180;&#12398;&#22580;&#21512;:dmy&#12467;&#12510;&#12531;&#12489;
dmy("01-05-2022", tz = "Asia/Tokyo")
#[1] "2022-05-01 JST"
########


#&#26178;&#38291;&#20184;&#12365;&#12398;&#26085;&#20184;&#12369;&#12487;&#12540;&#12479;&#12434;&#20316;&#25104;:XXX_hms&#12467;&#12510;&#12531;&#12489;
#XXX_hms&#12395;&#12399;&#12300;ymd_hms&#12301;,&#12300;mdy_hms&#12301;,&#12300;dmy_hms&#12301;
#&#24180;&#26376;&#26085;&#26178;&#20998;&#31186;&#12398;&#20006;&#12403;&#38918;&#12391;&#20351;&#12356;&#20998;&#12369;&#12427;
#TimeZone&#12398;&#21021;&#26399;&#20516;&#12399;&#21332;&#23450;&#19990;&#30028;&#26178;
mdy_hms("05-01-22 0:07:30")
#[1] "2022-05-01 00:07:30 UTC"

#&#12479;&#12452;&#12512;&#12478;&#12540;&#12531;&#12434;&#25351;&#23450;:tz&#12458;&#12503;&#12471;&#12519;&#12531;
#&#26085;&#26412;&#26178;&#38291;&#12408;&#22793;&#26356;
mdy_hms("05-01-22 0:07:30", tz = "Asia/Tokyo")
#[1] "2022-05-01 00:07:30 JST"
########


###&#24180;&#26376;&#26085;&#26178;&#20998;&#31186;&#12398;&#22793;&#26356;#####
#&#20363;&#12398;&#20316;&#25104;
TestHMS <- mdy_hms("22-05-01 0:07:30", tz = "Asia/Tokyo")

#&#31186;&#12434;&#25805;&#20316;:second&#12467;&#12510;&#12531;&#12489;
second(TestHMS) <- 10
#&#30906;&#35469;
TestHMS
#[1] "2022-05-01 00:07:10 JST"

#&#20998;&#12434;&#25805;&#20316;:minute&#12467;&#12510;&#12531;&#12489;
minute(TestHMS) <- 10
#&#30906;&#35469;
TestHMS
#[1] "2022-05-01 00:10:10 JST"

#&#26178;&#12434;&#25805;&#20316;:hour&#12467;&#12510;&#12531;&#12489;
hour(TestHMS) <- 10
#&#30906;&#35469;
TestHMS
#[1] "2022-05-01 10:10:10 JST"

#&#26085;&#12434;&#25805;&#20316;:day&#12467;&#12510;&#12531;&#12489;
day(TestHMS) <- 10
#&#30906;&#35469;
TestHMS
#[1] "2022-05-10 10:10:10 JST"

#&#26376;&#12434;&#25805;&#20316;:month&#12467;&#12510;&#12531;&#12489;
month(TestHMS) <- 10
#&#30906;&#35469;
TestHMS
#[1] "2022-10-10 10:10:10 JST"

#&#24180;&#12434;&#25805;&#20316;:year&#12467;&#12510;&#12531;&#12489;
#year(TestHMS) <- 10
#&#30906;&#35469;
TestHMS
#[1] "0010-10-10 10:10:10 LMT"

#&#20363;&#12360;&#12400;&#26085;&#12434;&#21462;&#24471;
#&#12381;&#12398;&#20182;&#12467;&#12510;&#12531;&#12489;&#12418;&#21462;&#24471;&#21487;&#33021;
day(TestHMS)
#[1] 10
########


#&#26085;&#20184;&#12369;&#12487;&#12540;&#12479;&#12363;&#12425;&#26332;&#26085;&#12434;&#27714;&#12417;&#12427;:wday&#12467;&#12510;&#12531;&#12489;
#&#25991;&#23383;&#12487;&#12540;&#12479;&#12391;&#32080;&#26524;&#12434;&#21462;&#24471;:label&#12458;&#12503;&#12471;&#12519;&#12531;
#&#26332;&#26085;&#12398;&#30465;&#30053;&#34920;&#35352;:abbr&#12458;&#12503;&#12471;&#12519;&#12531;;TRUE/FALSE
wday(Result, label = TRUE, abbr = FALSE, locale = "Japanese_Japan.932")
#[1] &#26085;
#Levels: &#26085; < &#26376; < &#28779; < &#27700; < &#26408; < &#37329; < &#22303;
#&#33521;&#35486;&#12391;&#21462;&#24471;:local&#12395;"English_Japan.932"&#12434;&#25351;&#23450;
wday(Result, label = TRUE, abbr = TRUE, locale = "English_Japan.932")
#[1] Sun
#Levels: Sun < Mon < Tue < Wed < Thu < Fri < Sat
########

#&#25351;&#23450;&#12375;&#12383;&#26085;&#20184;&#12369;&#12487;&#12540;&#12479;&#12363;&#12425;&#26376;&#12398;&#12415;&#30064;&#12394;&#12427;&#37197;&#21015;&#12434;&#20316;&#25104;:months&#12467;&#12510;&#12531;&#12489;
Result + months(0:5)
#[1] "2022-05-01" "2022-06-01" "2022-07-01" "2022-08-01" "2022-09-01" "2022-10-01"
########


#&#25351;&#23450;&#12375;&#12383;&#26085;&#20184;&#12369;&#12398;&#20024;&#12417;&#12289;&#36817;&#20284;&#12434;&#21462;&#24471;:round_date,floor_date,ceiling_date&#12467;&#12510;&#12531;&#12489;
#&#12487;&#12540;&#12479;&#12398;&#31278;&#39006;&#12434;&#25351;&#23450;:unit&#12458;&#12503;&#12471;&#12519;&#12531;;
#"second","minute","hour","day","week","month","year","quarter"&#12364;&#25351;&#23450;&#21487;&#33021;
#&#20363;&#12360;&#12400;floor_date&#12467;&#12510;&#12531;&#12489;
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"
########


#&#12452;&#12531;&#12479;&#12540;&#12496;&#12523;&#12487;&#12540;&#12479;&#12398;&#20316;&#25104;:interval&#12467;&#12510;&#12531;&#12489;
IntervalData <- interval(start = ymd("22/05/01", tz = "Asia/Tokyo"),
                         end = ymd("22/06/01", tz = "Asia/Tokyo"))
#&#30906;&#35469;
IntervalData
#[1] 2022-05-01 JST--2022-06-01 JST
########


###&#12452;&#12531;&#12479;&#12540;&#12496;&#12523;&#12487;&#12540;&#12479;&#12398;&#25805;&#20316;#####
#&#38283;&#22987;&#26085;&#20184;&#12398;&#21462;&#24471;:int_start&#12467;&#12510;&#12531;&#12489;
int_start(IntervalData)
#[1] "2022-05-01 JST"

#&#32066;&#20102;&#26085;&#20184;&#12398;&#21462;&#24471;:int_end&#12467;&#12510;&#12531;&#12489;
int_end(IntervalData)
#[1] "2022-06-01 JST"

#&#38283;&#22987;&#12392;&#32066;&#20102;&#12398;&#26085;&#20184;&#12434;&#20837;&#12428;&#26367;&#12360;&#12427;:int_flip&#12467;&#12510;&#12531;&#12489;
int_flip(IntervalData)
#[1] 2022-06-01 JST--2022-05-01 JST

##&#12487;&#12540;&#12479;&#12434;duration class&#12395;&#22793;&#25563;&#12375;&#12390;&#26399;&#38291;&#12434;&#35336;&#31639;
#&#22793;&#25563;:as.duration&#12467;&#12510;&#12531;&#12489;
TestDuration <- as.duration(IntervalData)
#&#30906;&#35469;
TestDuration
#[1] "2678400s (~4.43 weeks)"
#&#26399;&#38291;&#26085;&#25968;
as.numeric(TestDuration, "days")
#[1] 31

#&#26085;&#20184;&#12398;&#25805;&#20316;:int_shift,duration&#12467;&#12510;&#12531;&#12489;
#duration&#12391;&#25805;&#20316;&#12391;&#12365;&#12427;&#24773;&#22577;
#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をコピーしました