R言語でフォルダー毎に処理を繰り返す方法について説明します。
面倒なのでプログラムを以下に
# ディレクトリリストを作成
dir_list <- list.dirs(recursive=T)
#関係するフォルダーを抽出(…/abcで終わるフォルダーを抽出
abc_dirs <- dir_list[c(grep(“\\/abc$”,dir_list))]
for(dir_name in abc_dirs){
# ここでフォルダー毎の処理を行う。
}
対象となるフォルダー数を確認して、フォルダーのリストをグリグリ回そうと思ったのですが、意外と面倒だったので、抽出したフォルダーリストをそのまま使いました。
以下はファイル毎に処理をしたい場合に、ファイルのリストを
all_list <- list.files(“.”,recursive=T,pattern=”sample.csv”)
# abcフォルダーのcsvのみを抽出する。
csv_files <- file_list[c(grep(“/abc/”,all_list))]
#————————————
# フォルダーの分割リストを作る
# aaa/bbb/ccc/abc/sample.csv => “aaa” “bbb” “ccc” “abc” “sample.csv”
#————————————
# あとでフォルダー名の一部を使いたいので分解して保存しておく
flist_split <- strsplit(csv_files,”/”)
dst_fname <- paste(“../xyz”,”.csv”,sep=””)
#————————————
# csvを読込む
#————————————
i <- 1
for (fname in dbf_files){
src_csv <- read.csv(fname)
tmp <- src_csv[,c(“COL1″,”COL5”)]
# フォルダー名の一部をCOL_Xに設定しているだけ。
# 単にどこのフォルダーのデータかをカラムに入れたかった
tmp$COL_X <- flist_split[[i]][1]
# 順番を並び替えている
dst_csv <- tmp[,c(“COL1″,”COL_X”,”COL5″)]
# テキスト形式で書き出してみた。
write(t(dst_csv),dst_fname,ncolumns=3,sep=”,”,append=T)
i <- i + 1
}
write文で本来ならばwrite.csvで一気に書き込みたいところだったのですが、文字列に”aaaaa”とダブルクォーテーションマークが入ってしまうのを避けるため、この様な方法を取ってみました。
他に良い案があれば良かったのですが、初心者なのでこれで一応OKです。
参考になるんだろうか?
とにかく、備忘録です。
P.S. 上記のプログラムは都合によりプログラムの一部のみを記載しております。
ライブラリが足りないなどの場合は適宜ライブラリを追加してやってください。
また、プログラム掲載時に多少変更を加えています。
間違ってしまっている場合もあるかと思いますので動作の保証は致しません。