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

R批量读取CSV时筛选指定列值及跳过首行的实现方法

R批量筛选读取销售CSV文件解决方案

1 修正文件匹配规则

你原有代码中的pattern和实际文件名规则不匹配,先调整获取2019年所有目标文件的逻辑:

library(tidyverse) # 依赖dplyr、readr、purrr组件,也可以单独加载对应包
# 匹配所有命名符合Sales-月份-2019.csv规则的文件,忽略大小写差异
myfiles <- list.files(
  pattern = "^Sales-.+-2019\\.csv$", 
  ignore.case = TRUE, 
  full.names = TRUE
)

2 批量读取+筛选实现(不加载全量数据)

有两种常用实现方式,都可以满足「跳过每个文件首行数据、仅保留文章编号为1-5的行」的需求:

方式1:分块读取(适合单文件体积极大的场景)

读取时按分块处理,全程不会加载完整文件到内存:

# 定义分块处理规则
process_chunk <- function(chunk, pos) {
  # 跳过每个文件的第一行数据,对应你原有单文件写法的[-1,]
  if (pos == 1) chunk <- chunk[-1, ]
  # 筛选指定文章编号,需将article_id替换为你实际的列名
  chunk %>% filter(article_id %in% 1:5)
}

# 批量处理所有文件并合并结果
result <- map_dfr(myfiles, function(file_path) {
  read_csv_chunked(
    file = file_path,
    callback = DataFrameCallback$new(process_chunk),
    chunk_size = 10000, # 可根据内存大小调整分块行数
    show_col_types = FALSE
  )
})

方式2:逐文件处理(通用场景)

逐个读取文件,处理完立即释放原文件内存,适合大部分场景:

result <- map_dfr(myfiles, function(file_path) {
  read_csv(file_path, show_col_types = FALSE) %>%
    slice(-1) %>% # 跳过每个文件的第一行数据
    filter(article_id %in% 1:5) # 筛选指定文章编号
})

沿用ldply的适配写法

如果你想继续使用原有代码的ldply逻辑,调整后代码如下:

library(plyr)
result <- ldply(myfiles, function(x) {
  read_csv(x, show_col_types = FALSE) %>%
    slice(-1) %>%
    filter(article_id %in% 1:5)
})

注意事项

  • 请将代码中的article_id替换为你实际存储文章编号的列名
  • 如果你的CSV表头在第二行,不需要保留第一行作为表头,直接在read_csv中添加skip = 1参数即可,无需额外加slice(-1)

内容的提问来源于stack exchange,提问作者jontieez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 12:21:01