複数のExcelまたはCSVのファイルを読み込んで1つのデータフレームとしたいということがたまにあります。
そんなときは、1つづづ読み込んで、その後にbind_rowsというコマンドでくっつけることができます。
ところが、ファイルの数が多いと一つ一つ読み込むことがめんどくさくなってきます。そんなときは、Rスクリプトを書いて、それをデータソースとして登録することで解決できます。
例えば、以下のような複数のExcelのファイルがこのフォルダーの下にあったとしましょう。
こちらが、これらのファイルをいっぺんに読み込むためのRスクリプトになります。
library(readxl)
files <- list.files(path = "~/Dropbox/Data/multiple_files", pattern = "*.xlsx", full.names = T)
tbl <- sapply(files, read_excel, simplify=FALSE) %>%
bind_rows(.id = "id")
もし、Excelでなく、CSVファイルだった場合は以下のようになります。
library(readr)
files <- list.files(path = "~/Dropbox/Data/multiple_files", pattern = "*.csv", full.names = T)
tbl <- sapply(files, read_csv, simplify=FALSE) %>%
bind_rows(.id = "id")
違いは、 CSVを読み込むときは'readr' というRパッケージの 'read_csv' という関数を使い、Excelを読み込むときは'readxl' というRパッケージの'read_excel' という関数を使っています。
どちらにしても、上のスクリプトは以下のことを行っています。
以下のパラメーターを使って指定することができます。
sep="\t"
以下はスクリプトの全文です。
library(readr)
files <- list.files(path = "~/Dropbox/Data/multiple_files", pattern = "*.csv", full.names = T)
tbl <- sapply(files, read_csv, sep="\t", simplify=FALSE) %>%
bind_rows(.id = "id")
以下のパラメーターを使って指定することができます。
encoding="文字コード"
文字コードは日本語の場合は、CP932、Shift_JISといったものがあります。
以下は文字コードをShift_JISにしたスクリプトの例です。
library(readr)
files <- list.files(path = "~/Dropbox/Data/multiple_files", pattern = "*.csv", full.names = T)
tbl <- sapply(files, read_csv, sep="\t", encoding="shift-jis", simplify=FALSE) %>%
bind_rows(.id = "id")
ログファイルを読み込む場合は、read_excelやread_csvの代わりにread_log_file関数を使うことができます。
以下がスクリプトとなります。
library(readr)
files <- list.files(path = "~/Dropbox/Data/multiple_files", pattern = "*.csv", full.names = T)
tbl <- sapply(files, read_log_file, simplify=FALSE) %>%
bind_rows(.id = "id")
ファイルのパスに日本語が使われている場合、上記のスクリプトを流してファイルデータをインポートした際にできるデータフレームの「id」列の値が文字化けしていることがあります。
この「id」列にはそれぞれのファイル名が入っているはずなのですが、そちらが文字化けしてしまうケースがあります。
その場合はまず、Windowsの場合はシステムのロケールが日本語になっているのを確認して下さい。
その次に、Exploratoryのシステム・エンコーディングが「Japanese (Shift-JIS)」になっているのを確認して下さい。
最後に上記のスクリプトに以下の行を追加して下さい。
files <- enc2utf8(files)
上の一行を加えた後は以下のようになっているはずです。
library(readr)
files <- list.files(path = "~/Dropbox/Data/multiple_files", pattern = "*.csv", full.names = T)
files <- enc2utf8(files)
tbl <- sapply(files, read_csv, sep="\t", encoding="shift-jis", simplify=FALSE) %>%
bind_rows(.id = "id")
上記のスクリプトを以下のステップに沿ってExploratoryの中で登録して使用すれば、うまくいくはずです。
それでもまだ問題がある場合は、こちらサポート (support@exploratory.io)までお問い合わせ下さい。
Rスクリプトを書けるということは、Exploratoryの中でそれをデータソースとして登録することができます。
'R Script'をデータフレームのメニューから選びます。
Rスクリプト・エディターの中に上のスクリプトをコピーし貼り付けます。以下は、Excelファイルを読み込む例です。
あとは、「保存」ボタンを押すと、ひとつのデータフレームとしてインポートされます。
最後の列にもとのファイル名とロケーション情報(パス)を参照することができます。
テーブル・ビューだと以下のように見えます。