在R语言中从列表导入CSV文件并添加唯一标识列的方法
批量导入CSV并添加文件路径列的实现方法
你可以通过修改原代码的遍历逻辑,在读取每个CSV文件后为数据框添加对应路径(或路径片段)的列,以下是两种实现方式:
Base R 实现(无需额外依赖)
# 提前计算每个文件对应的命名片段(和原代码逻辑一致) name_vec <- str_before_first(str_after_nth(temp_dirs, "/", -2), "/") # 遍历文件列表,读取数据并添加路径/名称列 data_list <- lapply(seq_along(temp_dirs), function(i) { # 读取CSV文件 df <- read.csv(temp_dirs[i]) # 添加完整文件路径列 df$file_path <- temp_dirs[i] # 可选:添加你用来命名数据集的路径片段列 df$data_name <- name_vec[i] return(df) }) # 为列表元素命名,再转换为全局环境中的数据集 names(data_list) <- name_vec list2env(data_list, .GlobalEnv)
tidyverse 实现(更简洁)
如果你习惯使用dplyr和purrr,可以用更简洁的写法:
library(dplyr) library(purrr) # 提前计算命名片段 name_vec <- str_before_first(str_after_nth(temp_dirs, "/", -2), "/") # 同时遍历路径和名称,读取并添加列 data_list <- map2(temp_dirs, name_vec, ~ read.csv(.x) %>% mutate( file_path = .x, # 添加完整文件路径 data_name = .y # 添加命名片段 )) # 转换为全局环境中的数据集 names(data_list) <- name_vec list2env(data_list, .GlobalEnv)
关键修改说明
- 原代码直接调用
read.csv读取文件,现在改为在读取后通过$(Base R)或mutate(tidyverse)新增列,列值对应当前文件的路径或提前计算好的命名片段。 - 用
seq_along(Base R)或map2(tidyverse)实现同时获取文件路径和对应的命名片段,确保每个数据集的新增列值准确匹配。
内容的提问来源于stack exchange,提问作者L-dan
相关产品推荐
相关产品推荐

