LoginSignup
0
0

More than 5 years have passed since last update.

【R言語】複数の同形式CSVを読み込んで列毎に共通の解析をループで処理

Last updated at Posted at 2018-03-01

とある複数枚の画像にフィルタをかけてその効果を比較しなければならなくなりました。
どういった傾向があるかも手さぐりなので全画素の計算結果を保持したところ、
Excelでは200MBを優に越えるファイルが出来上がり、ちょっと関数をいじるだけで数分応答なしな状態。
こんなのやってられん!と、言うことで解析に有効と噂のRに手を出しました。

環境はR+R Studio

まだ機能やらオブジェクトの名前が良く分からないのでその辺はご勘弁ください。

画像にフィルタをかけた演算結果をCSVに保存してありましたので、それをread.tableで読み込みました。
先ずはsummaryを全部にかけて様子を見たかったのですが、中々連続で処理するのに難儀しましたので記録。

対象のCSVはこんな感じ

index columnName1 columnName2
0 123 321
1 456 654
2 789 987

こんな形のCSVを40個くらい作って読み込ませました。

columnName1のデータに関してファイルまたぎでsummary演算させることができました。


#最終的にsummary結果を突っ込むlist
D <- list()

#データ名用 行の名称に使用 今回は'newenv_変数名"にしました
DRowNames <- list()

#ls(environment())でenvironmentの変数名listが取れる
#文字列listですがそのままfor文動きます
for(i in ls(environment()))
{

  #is.recursive(hoge)はhogeが再帰的か調べる。
   #csvの列ごとにアクセスするとき$でアクセスするがそういった変数か調べられる
   #($が再帰変数のアクセス?なんだそうだ)
   #get('hoge')でhogeと言う名前の変数を呼び出す。
   #再帰的であっても該当する列名がなければNULLが返ってくる
   #よってis.nullで調べれば求める列名を持たない変数は弾ける

   if(!is.recursive(get(i))
       || is.null(get(i)$columnName1 ))
      {next}

     #paste()で新たな変数名を定義
     #assign()でpaste()で作った名称の変数に演算結果を格納する 今回はsummaryの演算結果
     assign(paste("newenv_", i, sep="") , summary(get(i)$columnName1))

     #rbind()でDに計算結果を行方向に追加していく
     D <- rbind(D,get(paste("summary_", i, sep="")))

     #登録したデータの名称(変数名)を記録していく
     DRowNames <- c(DRowNames, i)
}

#行名称の追加
row.names(D) <- DRowNames

このやり方を応用すればファイル名のリストさえ作ればcsv読み込みも一気にいけますね。

Rって結構盛り上がってる印象でしたが、意外と日本語資料は少ないと感じました。
また考え方の問題でしょうが、こういったことをやる手法は入手しづらく感じました。

こんなことするならpythonやれよってことなのかもしれませんが。
※python未経験です。

CSVファイルをインスタンス、列をプロパティって感じで考えてやってましたが的外れだったのかな?

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0