读取目录中的所有 csv 文件并将每个文件的名称添加到新列中

Git*_*ine 4 csv r readr

我有这段代码可以读取目录中的所有 CSV 文件。

nm <- list.files()

df <- do.call(rbind, lapply(nm, function(x) read_delim(x,';',col_names = T)))
Run Code Online (Sandbox Code Playgroud)

我想以将文件名附加到数据的方式修改它。结果将是一个包含所有 CSV 文件的单个数据框,并且在数据框中,有一列指定数据来自哪个文件。怎么做?

zep*_*ryl 5

do.call(rbind, lapply(...))您可以使用purrr::map_dfr()with参数来代替.id

\n
library(readr)\nlibrary(purrr)\n\ndf <- list.files() |>\n  set_names() |>\n  map_dfr(read_delim, .id = "file")\n\ndf\n
Run Code Online (Sandbox Code Playgroud)\n
# A tibble: 9 \xc3\x97 3\n  file    col1  col2\n  <chr>  <dbl> <dbl>\n1 f1.csv     1     4\n2 f1.csv     2     5\n3 f1.csv     3     6\n4 f2.csv     1     4\n5 f2.csv     2     5\n6 f2.csv     3     6\n7 f3.csv     1     4\n8 f3.csv     2     5\n9 f3.csv     3     6\n
Run Code Online (Sandbox Code Playgroud)\n

示例数据:

\n
# A tibble: 9 \xc3\x97 3\n  file    col1  col2\n  <chr>  <dbl> <dbl>\n1 f1.csv     1     4\n2 f1.csv     2     5\n3 f1.csv     3     6\n4 f2.csv     1     4\n5 f2.csv     2     5\n6 f2.csv     3     6\n7 f3.csv     1     4\n8 f3.csv     2     5\n9 f3.csv     3     6\n
Run Code Online (Sandbox Code Playgroud)\n

  • 请注意,[`purrr::map_dfr()` 最近已被开发人员取代](/sf/answers/5254349551/)。 (2认同)