日にちなどのデータは主に“Data”構造と“POSIXct構造”
# 今日の日付を返す。
Sys.Date()
## [1] "2017-10-24"
# 構造を確認しておく。
today <- Sys.Date() #今日の日付を返す。データ構造は"date" 1970年から存在
class(today) #str(today)でみてもいいけど
## [1] "Date"
# 日付の足し算がどうなるかもみておく。
tomorrow <- today + 1
tomorrow
## [1] "2017-10-25"
# 日付の入力方法。年月日は必ず下記の順番
my_birth1 <- as.Date("1984-11-13")
#違う順に年月日入力ならフォーマットで規定
my_birth2 <- as.Date("13/11/1984", format = "%d/%m/%Y")
# 一致しているかidenticalで確認
identical(my_birth1, my_birth2)
## [1] TRUE
my_birth <- as.Date(“1984-11-13”)以外に入力する場合、フォーマットで規定
フォーマットに使う日付データの略語は下記
年:1984なら“%Y”, 84なら“%y”
月:11なら“%m”, Novemberなら“%B”, Novなら“%b”
日:13なら“%d”, 曜日Wednesdayなら“%A”, 曜日Wedなら“%a”
年月日だけでなく時分秒まで含んだ概念。
# 今日の日付(POSIXct)を返す。
Sys.time()
## [1] "2017-10-24 18:15:04 JST"
# DataとPOSINctは残念ながら違う
# identicalで同じものか確認
today_sec <- Sys.time()
identical(today, today_sec)
## [1] FALSE
フォーマットの時に略語で規定するのは“Date”構造と一緒。略語は下記。
時:24時間表示(01-23) “%H”, 12時間表示(01-12) “%I”
AM/PMは“%p”
分:01-59で表示 %M
秒:0-59で表示 %S
# 単純にData構造同士を引き算すると日数が返される
# today_sec(POSINct)とmy_birth1(Data)で引き算するとエラー
today - my_birth1
## Time difference of 12033 days
# POSINctとDATAを比較したかったらas.〜で構造変える。
as.Date(today_sec) - my_birth1
## Time difference of 12033 days
# あとunclassを使うと1970年1月1日からの日数を返す。
unclass(my_birth1)
## [1] 5430
# unclass(today_sec)とPOSINctに使うと1970/1/1からの秒数を返す
unclass(today_sec)
## [1] 1508836504
#diff()というのもある。下記だとdiffはday1と2の差, day2と3の差を計算する
day1 <- today
day2 <- day1 - 7
day3 <- day2 - 14
day4 <- day3 - 12
day5 <- day4 - 6
days_5 <- c(day1, day2, day3, day4, day5)
diff(days_5)
## Time differences in days
## [1] -7 -14 -12 -6
例えば・・・
day1 <- “Nov 13, ‘84“
day2 <-”1984-11-13“
day3 <-”13/November/1984“
これを変換する時は各々こんな感じ。
date1 <- as.Date(str1, format =”%b %d,’%y”)
date2 <- as.Date(str2, format = “%Y-%m-%d”)
date3 <- as.Date(str3, format = “%d/%B/%Y)
年月日のうち年だけ抽出したりもできる
format(date1,”%A“) format(date2,”%d“)
いずれ過去にやった年月日のデータも解析したら例題として記録する。
Note that the echo = FALSE
parameter was added to the code chunk to prevent printing of the R code that generated the plot.