You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:55:20