在R中合并csv文件并添加具有文件名的列

在R中合并csv文件并添加具有文件名的列,r,R,我想合并存储在单个文件夹中的多个csv文件,并在对应的行中添加一列,其中包含每个csv文件的名称。这些文件具有相同的列数和列名。例如: 文件1.csv第1行第1列:“a”,第1行第2列:“b” 文件2.csv第1行第1列:“c”,第1行第2列:“d” 期望输出: 第1栏第2栏第3栏 A.B文件1.csv CD文件2.csv您可以首先获取所有文件名,这些文件名指定了列表.files中的模式参数。您可以使用lappy读取它们并添加一个新列 files <- list.files(pattern

我想合并存储在单个文件夹中的多个csv文件,并在对应的行中添加一列,其中包含每个csv文件的名称。这些文件具有相同的列数和列名。例如:

文件1.csv第1行第1列:“a”,第1行第2列:“b” 文件2.csv第1行第1列:“c”,第1行第2列:“d”

期望输出: 第1栏第2栏第3栏 A.B文件1.csv
CD文件2.csv

您可以首先获取所有文件名,这些文件名指定了
列表.files
中的
模式
参数。您可以使用
lappy
读取它们并添加一个新列

files <- list.files(pattern = '\\.csv$', full.names = TRUE)

all_data <- do.call(rbind, lapply(files, function(x) 
                    transform(read.csv(x), File = basename(x))))

这可以通过多种方式实现。我倾向于使用fs获取文件路径的数据帧,然后使用purrr将csv作为嵌套数据帧读入:

library(tidyverse)
library(fs)
dir_info() %>%
  filter(endsWith(path, ".csv")) %>%
  select(path) %>% 
  mutate(data = purrr::map(path, read_csv)) %>%
  unnest()

您想
合并
这些文件,还是
追加
它们?合并(粗略地)意味着添加新列;追加意味着添加新行。假设文件A和B分别有50行和100行以及10列。
merge
输出可以有50-150行和10-20列;追加输出将有150行和10列。
library(tidyverse)
library(fs)
dir_info() %>%
  filter(endsWith(path, ".csv")) %>%
  select(path) %>% 
  mutate(data = purrr::map(path, read_csv)) %>%
  unnest()