R では、時系列データを Date クラスや POSIXct クラスとして取り扱うことができる。時系列データの日付と時間を文字列として扱わずに、Date クラスや POSIXct クラスとして扱うことで、数時間の平均を計算したり、日数を足したり引いたり、プロットしたりするときに便利である。
日付
日付のみからなるデータの場合は、Date クラスと利用する。文字列を日付に変換する場合は as.Date
関数を利用する。
x <- c("2018-01-01", "2018-01-02")
y <- as.Date(x)
y
## [1] "2018-01-01" "2018-01-02"
as.Date
関数で変換された Date クラスのオブジェクトを出力すると、文字列と同じようにみえるが、足し算などをしたりすることが可能になる。
class(y)
## [1] "Date"
y + 1
## [1] "2018-01-02" "2018-01-03"
y -1
## [1] "2017-12-31" "2018-01-01"
Date クラスのオブジェクトは、文字列から変換するほかに、seq
関数などを利用して生成することも可能である。
m <- seq(as.Date("2018/01/01"), as.Date("2018/12/31"), "months")
head(m)
## [1] "2018-01-01" "2018-02-01" "2018-03-01" "2018-04-01" "2018-05-01" "2018-06-01"
w <- seq(as.Date("2018/01/01"), as.Date("2018/12/31"), "weeks")
head(w)
## [1] "2018-01-01" "2018-01-08" "2018-01-15" "2018-01-22" "2018-01-29" "2018-02-05"
d <- seq(as.Date("2018/01/01"), as.Date("2018/12/31"), "days")
head(d)
## [1] "2018-01-01" "2018-01-02" "2018-01-03" "2018-01-04" "2018-01-05" "2018-01-06"
時間
時間は POSIXct または POSIXlt クラスのオブジェクトとして扱う。POSIXct はカレンダー時間(ct)を意味し、時間を 1970 年 1 月 1 日 00:00:00 から数えた秒数で保存する。POSIXlt はローカル時間(lt)を意味し、時間を時間単位(時、分、秒など)のリストとして扱う。
t <- "2018-01-01 00:00:00"
ct <- as.POSIXct(t, format="%Y-%m-%d %H:%M:%S", tz = "Japan")
unclass(ct)
## [1] 1514732400
## attr(,"tzone")
## [1] "Japan"
lt <- as.POSIXlt(t, format="%Y-%m-%d %H:%M:%S", tz = "Japan")
unclass(lt)
## $sec
## [1] 0
## $min
## [1] 0
## $hour
## [1] 0
## $mday
## [1] 1
## $mon
## [1] 0
## $year
## [1] 118
## $wday
## [1] 1
## $yday
## [1] 0
## $isdst
## [1] 0
## $zone
## [1] "JST"
## $gmtoff
## [1] NA
## attr(,"tzone")
## [1] "Japan"