見出し画像

【R言語】複数ファイル(csv)を読み込む方法

背景

データ分析する際にあるあるな、複数ファイル・データを一つのデータセットにまとめてRに読み込む方法を紹介します。2-3個のファイルであればまあ手作業でなんとかという気もしますが、例えば100個くらいファイルだと厳しいですよね。


手順

まずは必要なパッケージを読み込みます。pacmanというパッケージは読み込みだけでなく、必要に応じて(もしパッケージのインストールがされていない場合)、インストールも実行したうえで読み込んでくれるので便利です。

# パッケージの読み込み
library(pacman) # パッケージをインストール及び読み込む便利なパッケージ
p_load(tidyverse)

次にサンプルファイルを生成していきます。tempdirに1925~2024年のid, 日付, ブランド, 売上を持つ100行のcsvファイルを作っていきます。

# 一時フォルダを作成
temp_dir = tempdir()

# 関数を定義
create_data = function(year) {
  id = sample(1:10, 100, replace = TRUE) # idは1~10の間でランダムに生成
  start_date = ymd(paste0(year, "-01-01"))
  end_date = ymd(paste0(year, "-12-31"))
  date = sample(seq(start_date, end_date, by = "1 day"), 100, replace = TRUE) # 日付もランダムに生成
  brand = sample(letters[1:5], 100, replace = TRUE) # ブランドはa~eまでの間でのランダム に生成
  amount = round(runif(100, 1000, 10000))
  
  tibble(id, date, brand, amount)
}

# データを生成してCSVファイルに書き出し
for (year in 1925:2024) {
  data = create_data(year)
  file_name = file.path(temp_dir, paste0("data_", year, ".csv"))
  write.csv(data, file_name, row.names = FALSE)
}

すると以下のようなデータをもつファイルが100つ(100年分)生成されます。

2015年のファイルの出力例

そしてファイルを順番に読み込み縦に積む処理を行います。ちゃんと10000行(100行×100年分)になっていますね。

# CSVファイルを読み込み、縦に積み上げる
all_data = list.files(temp_dir, pattern = "data_", full.names = TRUE) |>
  map_dfr(read_csv)

# 行列の数を確認
all_data |> dim()
[1] 10000  4


副業やってます

副業としてデータ分析やR言語を用いた業務効率化・自動化対応などをやっていますので、もしご興味ある方は以下のサイトからお問い合わせください。

拙い記事でしたが、ご一読ありがとうございました!




よろしければサポートお願いします。