開始日と終了日とを指定する
R言語で、連続する日付のベクトルを作りたければ、seq()
函数を使えばよい [1] 。例えば、2017年12月25日から2018年1月8日までの連続する15日間の日付のベクトルは以下のようにして作ることができる。
seq(as.Date("2017-12-25"), as.Date("2018-01-08"), by = "day") # [1] "2017-12-25" "2017-12-26" "2017-12-27" "2017-12-28" "2017-12-29" # [6] "2017-12-30" "2017-12-31" "2018-01-01" "2018-01-02" "2018-01-03" # [11] "2018-01-04" "2018-01-05" "2018-01-06" "2018-01-07" "2018-01-08"
要するに、1番目の引数が開始日、2番目の引数が終了日になっている。開始日も終了日も Date
型にしないといけないので、as.Date()
函数をはさんでいる。そして、最後の by = "day"
は要素と要素の間隔が1日であることを示している。
間隔を変える
上記では、要素と要素の間隔が1日であったが、by = "day"
の部分を変えれば間隔を変えることができる。
例えば、間隔を1週間にしたければ、by = "week"
とする。
seq(as.Date("2017-12-25"), as.Date("2018-01-08"), by = "week") # [1] "2017-12-25" "2018-01-01" "2018-01-08"
間隔を表すために使える名詞としては、以下のものがある。
"day"
(日)"week"
(週)"month"
(月)"quarter"
(四半期)"year"
(年)
これらの名詞の前に数字を付けることもできる。例えば、間隔を3日にしたければ、by = "3 days"
とする。
seq(as.Date("2017-12-25"), as.Date("2018-01-08"), by = "3 days") # [1] "2017-12-25" "2017-12-28" "2017-12-31" "2018-01-03" "2018-01-06"
なお、複数形の days
のかわりに、単数形の day
を使っても同じ結果が得られる。
seq(as.Date("2017-12-25"), as.Date("2018-01-08"), by = "3 day") # [1] "2017-12-25" "2017-12-28" "2017-12-31" "2018-01-03" "2018-01-06"
また、by
の引数に数値を与えると、その数値を日数とみなす。つまり、by = 3
としても、間隔が3日になり、by = "3 days"
と指定したのと同じになる。
seq(as.Date("2017-12-25"), as.Date("2018-01-08"), by = 3) # [1] "2017-12-25" "2017-12-28" "2017-12-31" "2018-01-03" "2018-01-06"
開始日とできあがりのベクトルの長さとを指定する
連続する日付のベクトルを作りたければ、終了日を指定せずに、開始日とできあがりのベクトルの長さとを指定するという手もある。
例えば、2018年3月7日から連続9日間の日付のベクトルを作りたいとしよう。この場合、以下のようにして作ることができる。
seq(as.Date("2018-03-07"), by = "day", length.out = 9) # [1] "2018-03-07" "2018-03-08" "2018-03-09" "2018-03-10" "2018-03-11" # [6] "2018-03-12" "2018-03-13" "2018-03-14" "2018-03-15"
length.out = 9
でできあがりのベクトルの長さが9であることを指定している。そして、by = "day"
で間隔が1日であることを示している。
間隔を変える
終了日を指定せずに、できあがりのベクトルの長さを指定する場合も、間隔を変えることができる。例えば、2018年1月11日からはじめて、2週間間隔で、10回分だけ続くような日付のベクトルを作りたいとしよう。この場合は以下のようにすればよい。
seq(as.Date("2018-01-11"), by = "2 weeks", length.out = 10) # [1] "2018-01-11" "2018-01-25" "2018-02-08" "2018-02-22" "2018-03-08" # [6] "2018-03-22" "2018-04-05" "2018-04-19" "2018-05-03" "2018-05-17"