R上で整形したデータや分析結果をその都度.csvや.xlsxに出力したいときは多々あると思います。
その際,出力するファイル名にそのタイミングの日付+時刻を入れておけば,前に出力したファイルを上書きすることなくて便利です。
そこで,この記事ではRで出力したファイルに日付を入れる方法について紹介します。
Rで出力ファイルに日付を入れる方法
Rで出力ファイルに日付を入れるためのスクリプトはこちらです。
(以下は,.csvファイルとして出力する場合です)
library(tidyverse)
time<-Sys.time() %>% format("%Y-%m%d-%H-%M-%S")
write.csv(dat,paste0("dat_",time,".csv"))
イメージとしては,
①timeという変数にその瞬間の時間情報を入れる。
②paste関数を使って,①で作った時間情報をファイル名の末尾につける
という形です。
なお,tidyverseパッケージを読み込んでいるのは,パイプ演算子(%>%)を使うためです。
以下で,各行について説明します。
時間情報を取り出す (Sys.time()を使う)
Sys.time()は実行したタイミングの時間情報を取り出すことができます。
最初のSだけ大文字なのが注意ポイントです。
ただし,Sys.time()をそのまま実行すると,”2022-05-21 11:23:00 JST”といった形で出力されてしまいます。
このままだと,ファイル名として使用できない ”:”が入っていて不便です。
そこで,format()を使って年(y),月(m),日(d),時(H),分(M),秒(S)だけ取り出しています。
time<-Sys.time() %>% format("%Y-%m%d-%H-%M-%S")
なお,ここで使っている %>% はパイプ演算子と呼ばれるものですが,1行で時間情報の取り出しとformat関数による情報の整理を終えたかったから使っているだけですので,パイプ演算子を使わずに記述する場合は,以下のようになります。
time<-Sys.time()
time<- format(time,"%Y-%m%d-%H-%M-%S")
ちなみに,tidyverseに含まれるdplyr を読み込む必要がありますので,使う際には最初にlibrary(tidyverse)しておきます。
出力ファイル名に時間情報を反映させる(paste()を使う)
時間情報をtimeに格納したらその情報を出力ファイルに反映させます。
paste()を組合せてファイル名にtimeの中身を表示させるようにします。
なお,ここではファイル名とtimeの間にスペースをつけたくなかったので,paste0()を使っています。
write.csv(dat,paste0("dat_",time,".csv"))
実行すると,以下のように作業ディレクトリ内に出力されたcsvファイル名の末尾に出力された時間情報がつけられます。
timeを作ったタイミングの時間情報が反映されるので,write.csv()の直前に,time<-Sys.time()セットで置いておくと良いと思います。
まとめ
Rで出力ファイルに日付を入れるための方法をまとめました。
頻繁にファイルを出力しないといけないときに試してみてください。
なお,ここで紹介したのは.csvでしたが,.xlsxのファイルやほかのファイル形式でも同じように出来ると思います。