Rに読み込む数百の中規模のExcelファイル(5000〜50.0000行、約100列)があります。これらには、x_1.xlsx
、x_2.xlsx
などの明確に定義された命名パターンがあります。
これらのファイルを最速で最も簡単な方法でRにロードするにはどうすればよいですか?
list.files
を使用すると、作業ディレクトリ内のすべてのファイル名のリストを作成できます。次に、lapply
を使用してそのリストをループし、readxl
パッケージのread_Excel
関数で各ファイルを読み取ることができます。
library(readxl)
file.list <- list.files(pattern='*.xlsx')
df.list <- lapply(file.list, read_Excel)
もちろん、このメソッドは、read.csv
やread.table
などの他のファイル読み取り関数でも使用できます。 read_Excel
を適切なファイル読み取り関数に置き換え、list.files
で正しいパターンを使用していることを確認してください。
ファイルをサブディレクトリにも含める場合は、次を使用します。
file.list <- list.files(pattern='*.xlsx', recursive = TRUE)
Excelファイルを読み込むためのその他の可能なパッケージ: openxlsx & xlsx
列が各ファイルで同じであると仮定すると、 dplyr のbind_rows
を使用して、それらを1つのデータフレームにバインドできます。
library(dplyr)
df <- bind_rows(df.list, .id = "id")
または data.table のrbindlist
を使用
library(data.table)
df <- rbindlist(df.list, idcol = "id")
どちらにも、個別のデータセットを識別するためのid
列を追加するオプションがあります。
Update:数値識別子が必要ない場合は、simplify = FALSE
でsapply
を使用して、file.list
のファイルを読み取ります。
df.list <- sapply(file.list, read.csv, simplify=FALSE)
dplyrからbind_rows
またはdata.tableからrbindlist
を使用すると、id
列にファイル名が含まれるようになりました。
さらに別のアプローチはpurrr
- packageを使用しています:
library(purrr)
file.list <- list.files(pattern='*.csv')
file.list <- setNames(file.list, file.list) # only needed when you need an id-column with the file-names
df <- map_df(file.list, read.csv, .id = "id")
名前付きリストを取得する他のアプローチ:数値識別子だけが必要ない場合は、前のリストのデータフレームにファイル名を割り当てることができますそれらを一緒にバインドします。これを行うにはいくつかの方法があります。
# with the 'attr' function from base R
attr(df.list, "names") <- file.list
# with the 'names' function from base R
names(df.list) <- file.list
# with the 'setattr' function from the 'data.table' package
setattr(df.list, "names", file.list)
data.tableからのrbindlist
またはdplyrからのbind_rows
を使用して、データフレームのリストを1つのデータフレームにバインドできます。 id
列には、数値識別子ではなくファイル名が含まれるようになりました。