【R】for文でdate型のベクトルを使うときのTIPS

date型のベクトルをfor文で繰り返し処理をするときに工夫が必要だったのでその対応方法をまとめました。

理由はわからないが、date型のベクトルから要素をfor文で取得するとnumeric型で取得してしまうらしいです。対応方法として思いついたのはseq_along()を使う方法。

seq_alongに関する公式ドキュメントは下記。 www.rdocumentation.org

日付のベクトルを作成

まずは日付のベクトルvctを作成します。

s_d='2022-01-01'
e_d='2022-12-01'
vct <- seq(as.Date(s_d), as.Date(e_d), by='month')

seq()について

seq()を使うことで連続する値や日付をベクトルで取得することができます。 以下に簡単な例を示します。

seq(x, y)で、x から y までの連続する値を取得できます。

vct_1 = seq(1,11)
vct_1

seq(x, y, by=z)で、 x から y までを z の値ごとに取得できます。

vct_2 = seq(1,11, by=2)
vct_2

seq(x, y, by=z)で、xとyを日付にすることで連続する日付を取得することができます。また、zには「day」「month」「year」のいずれかを入れます。dayであれば連続する日付、monthであれば連続する月の日付、yearであれば、連続する年の日付が取得できます。

# by='day'
seq(as.Date('2022-01-01'), as.Date('2022-01-05'), by='day')

# by='month'
seq(as.Date('2022-01-01'), as.Date('2022-05-01'), by='month')

# by='year'
seq(as.Date('2022-01-01'), as.Date('2026-01-01'), by='year')

ベクトルからfor文で要素を日付型として取得する

日付の入ったvctからfor文で要素を日付型として取得するには、seq_along()を使い要素の番号を取得してベクトルの位置を指定するやり方が一つの方法です。

for (x in seq_along(vct)){
    print(vct[x])
}

下記のように要素をそのまま取り出すとdate型ではなくnumeric型として取得することになります。

for (d in vct){
    print(d)
}

seq_along()以外にもっと賢い方法があるのかもしれないけどこれしか思いつきませんでした。詳しい人がいたら教えてくださいm(__)m