時系列データ

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"