質問: 現在、Rを用いた分析を行なっている初心者なのですが、不明点が発生した為 この場を借りて質問させていただきます。 コンパイラには、Rstudioを利用しています。 右上に読み込み済みデータを確認できる"Data"という箇所にすでに読み込み済み.CSVファイルが **100件**あるのですが、**全て名前が異なり**、各データに含まれる列に新たな項目として、**100件ごとに.CSVファイルの名前を追加**したいと考えております。これfor文等を用いて自動で追加できるようにしたいのですが、わからない為どなたか詳しい方にご教授いただきたいです。 (例) a.csv b.csv c.csv ・ ・ ・ に対してaの中身(行列)が 123456 A B C D だとするなら、7列目にnameという列名を追加し、 7列目に中身を全て"a"を格納したいです。 同じ作業をa.csv,b.csv,c.csvと全て行いたいです。
回答: ``` library(tidyverse) dir_path <- "YOUR_PATH" files <- dir(path = dir_path, pattern = ".csv", full.names = TRUE) # ファイルの一覧をフルパスで取得する file_names <- str_sub(string = basename(files), start = 1, end = -5) # ファイル名の非拡張子部分を取得する # forによる処理 results <- NULL # 結果をおさめる入れ物を作る for(i in seq_along(file_names)){ result <- read_csv(files[i]) result$name <- file_names[i] results[[i]] <- result } print(results) ``` tidyverseパッケージを多用する以下のようなアプローチもあります。 ``` map2(.x = files, .y = file_names, .f = ~ read_csv(.x) %>% mutate(name = .y)) ```