LoginSignup
1
1

More than 5 years have passed since last update.

【R言語】自動でCSVを読み込んで共通の解析

Last updated at Posted at 2018-03-02

前回の続き。
ファイルの読み込みをファイル名称listでやってみました。

test1~test3のcsvを作ってC:\test\に保存しました。

test1.csv

index columnName1 columnName2 columnName3 columnName4 columnName5
0 123 321 519 717 915
1 456 654 852 1050 1248
2 789 987 1185 1383 1581
3 1122 1320 1518 1716 1914
4 1455 1653 1851 2049 2247
5 1788 1986 2184 2382 2580
6 2121 2319 2517 2715 2913
7 2454 2652 2850 3048 3246
8 2787 2985 3183 3381 3579
9 3120 3318 3516 3714 3912
10 3453 3651 3849 4047 4245

test2.csv

index columnName1 columnName2 columnName3 columnName4 columnName5
0 456 654 852 1050 1248
1 789 987 1185 1383 1581
2 1122 1320 1518 1716 1914
3 1455 1653 1851 2049 2247
4 1788 1986 2184 2382 2580
5 2121 2319 2517 2715 2913
6 2454 2652 2850 3048 3246
7 2787 2985 3183 3381 3579
8 3120 3318 3516 3714 3912
9 3453 3651 3849 4047 4245
10 3786 3984 4182 4380 4578

test3.csv

index columnName1 columnName2 columnName3 columnName4 columnName5
0 789 987 1185 1383 1581
1 1122 1320 1518 1716 1914
2 1455 1653 1851 2049 2247
3 1788 1986 2184 2382 2580
4 2121 2319 2517 2715 2913
5 2454 2652 2850 3048 3246
6 2787 2985 3183 3381 3579
7 3120 3318 3516 3714 3912
8 3453 3651 3849 4047 4245
9 3786 3984 4182 4380 4578
10 4119 4317 4515 4713 4911

これを以下のコードで読み込んで処理しました。

#読み込むファイル名(変数名)
loadNameList <- c("test1", "test2", "test3")

#ファイルパスの\は/にしないと通りません
dirPath <- "C:/test/"
extension <- ".csv"


#計算結果を詰めるlist
D <- list()
#行の名前list
DRowNames <- list()
rowIndex <- 0

for(i in loadNameList)
{
  newenvName1 <- i
  assign(newenvName1,
         #fileEncoding="UTF-8-BOM"が必要な条件が不明 .NETのUTF-8指定だと必要なのかパスの日本語で必要なのか・・・?
         read.csv(sprintf("%s%s%s",dirPath,i,extension), sep = ",", fileEncoding="UTF-8-BOM"))
  if(!is.recursive(get(newenvName1))
     ||is.null(get(newenvName1)$columnName1 ))
  {next}


  newenvName2 <- sprintf("summary_%s",i) 
    assign(newenvName2 , rowIndex)

    assign(newenvName2, 
           #plot時のX軸データが欲しいので適当なindexを付けてます。
           cbind(get(newenvName2),
                 #データ構造を誤認していました
                 #summaryは実際は行方向に計算結果を持っていたようです
                 #よって一旦行列を入れ替えます
                 t(summary(get(newenvName1)$columnName1 ))))
    D <- rbind(D,get(newenvName2))
    DRowNames <- c(DRowNames, newenvName2)

    rowIndex <- rowIndex + 1
}
row.names(D) <- DRowNames

Dの中身を見るとこんな感じに仕上がりました。

結果

Min. 1st Qu. Median Mean 3rd Qu. Max.
summary_test1 0 123 955.5 1788 1788 2620.5 3453
summary_test2 1 456 1288.5 2121 2121 2953.5 3786
summary_test3 2 789 1621.5 2454 2454 3286.5 4119

これで

plot(D[,1],D[,2], xlab="index", ylab=dimnames(D)[[2]][2])

とかでplotも引けます。
列名を取るのにちょっと苦労しました。
○○namesが色々ありますが自分が今扱いたいものがどれなのか分からないですね~。
行や列に名前を付けるとdimnamesで取れるんですね。
存在を知ってれば納得ですが、存在を知らないと中々辿り着けません・・・。

因みに

>D[0,]
      Min. 1st Qu. Median Mean 3rd Qu. Max.
> D[,0]

summary_test1
summary_test2
summary_test3

でそれっぽいものが取れますが、
先頭に空白要素があってplotで使おうとすると

plot(D[,0],D[,1])
Error in xy.coords(x, y, xlabel, ylabel, log) :
'x' and 'y' lengths differ

と怒られます。

1
1
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
1
1