R语言从工作目录所有CSV提取指定列并合并为数据框的问题
解决R中批量读取CSV并合并指定列的问题
这问题我太熟了!你现在用assign把每个CSV存成单独对象的写法,确实会因为文件更新导致对象名混乱,完全没法统一处理。咱们换个更高效的思路:直接批量读取文件并提取需要的列,最后合并成一个统一的数据框,不管目录里新增多少CSV,都能自动适配。
方法一:Base R 实现
不用额外安装包,用基础函数就能搞定:
# 获取所有CSV文件的完整路径(加full.names避免路径问题) temp <- list.files(pattern = "*.csv", full.names = TRUE) # 批量读取每个文件,只提取需要的两列 df_list <- lapply(temp, function(file) { # 读取文件后直接筛选列 read.csv(file)[c("item_number", "sale_price")] }) # 把列表里的所有小数据框合并成一个大的数据框 combined_df <- do.call(rbind, df_list)
方法二:Tidyverse 实现(更简洁)
如果你习惯用tidyverse工具链,代码会更清爽,还能轻松处理异常情况:
library(tidyverse) # 链式操作:获取文件列表 → 批量读取并选列 → 合并 combined_df <- list.files(pattern = "*.csv", full.names = TRUE) %>% map_dfr(~read_csv(.x) %>% select(item_number, sale_price))
额外小技巧:兼容缺失列的情况
如果有的CSV文件可能没有item_number或sale_price列,可以用select(any_of(...))来避免报错,缺失的列会自动填充NA:
combined_df <- list.files(pattern = "*.csv", full.names = TRUE) %>% map_dfr(~read_csv(.x) %>% select(any_of(c("item_number", "sale_price"))))
这样处理后,所有数据都统一存在combined_df里,不管目录里新增或删除了CSV,只要运行这段代码就能得到最新的合并结果,完全不用再操心每个文件的名字啦!
内容的提问来源于stack exchange,提问作者Dan Kidney
相关产品推荐
相关产品推荐

