R语言批量导入CSV:如何将每个文件数据存入独立列?
解决CSV批量导入时同名字段合并的问题
当然可以在现有代码基础上修改,核心思路是给每个文件的列名添加唯一标识(比如文件名前缀),避免不同文件的同名列被合并。
修改后的代码如下:
library(tidyverse) dat <- dir_ls(regexp = "\\.csv$") %>% # 提取文件名(去掉路径和.csv后缀)作为每个文件的标识 set_names(nm = ~ str_remove(basename(.), "\\.csv$")) %>% # imap遍历,同时获取文件路径和对应的文件名标识 imap_dfr(function(file_path, file_name) { # 读取CSV文件 read_csv2(file_path, col_types = cols(.default = col_character())) %>% # 给所有列名添加文件名前缀,格式为"文件名_原列名" rename_with(~ paste0(file_name, "_", .x), everything()) })
关键修改说明:
- 用
set_names给每个文件路径绑定一个简洁的文件名(去掉.csv后缀),作为后续列名的前缀来源。 - 替换
map_df为imap_dfr:imap能同时拿到文件路径和我们设置的文件名标识,dfr保证最终输出为数据框。 - 通过
rename_with给每一列的名称加上文件名前缀,确保不同文件的同名列拥有唯一名称,导入后不会被合并成同一列。
举个例子:如果有两个文件data_jan.csv和data_feb.csv,都包含sales列,处理后会变成data_jan_sales和data_feb_sales两个独立列,完全避免数据堆叠。
内容的提问来源于stack exchange,提问作者jtjtjtjt
相关产品推荐
相关产品推荐

