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

如何在R语言中通过索引移除list.files()生成向量中的指定文件名

批量读取并合并Excel文件(排除指定文件)

问题背景

需要程序化读取一批Excel文件,合并为单个数据集后导出新文件。常规用list.files()和for循环实现,但本次需排除路径中包含"no"或"negative"的文件,且无法移动目录内文件。之前尝试生成待移除文件的索引后用vec1[-c(rm.files)]移除,但未成功,需要正确实现方法。

原尝试代码:

library(tidyverse)

vec1 <- c('C:/yes/file.xlsx','C:/yes/file.xlsx','C:/yes/file.xlsx',
          'C:/no/file.xlsx','C:/no/file.xlsx','C:/yes/file.xlsx',
          'C:/yes/file.xlsx','C:/yes/file.xlsx','C:/negative/file.xlsx')

vec1


rm.files <- vec1 %>% str_locate(c('no')) %>% data.frame() %>% 
  coalesce(vec1 %>% str_locate('negative') %>% data.frame()) %>% 
  na.omit() %>% 
  rownames() 
rm.files

解决方案

方法一:直接筛选保留文件(推荐)

用str_detect一步筛选出符合要求的文件路径,无需生成删除索引:

library(tidyverse)

vec1 <- c('C:/yes/file.xlsx','C:/yes/file.xlsx','C:/yes/file.xlsx',
          'C:/no/file.xlsx','C:/no/file.xlsx','C:/yes/file.xlsx',
          'C:/yes/file.xlsx','C:/yes/file.xlsx','C:/negative/file.xlsx')

# 筛选不包含"no"或"negative"的文件
keep_files <- vec1[!str_detect(vec1, "no|negative")]
keep_files

str_detect检查每个路径是否包含目标字符串,!取反后得到需要保留的文件列表。如果需要忽略大小写,可改为regex("no|negative", ignore_case = TRUE)。

方法二:修正索引删除逻辑

如果坚持用索引删除,需将原代码得到的字符型行号转为数值型,或者直接用which获取数值索引:

# 获取需要删除的文件索引
rm_indices <- which(str_detect(vec1, "no|negative"))
# 移除对应文件
keep_files <- vec1[-rm_indices]
keep_files

原代码中rownames()返回的是字符格式的行号(如"4"),R的索引需要数值型,直接使用会出错,转成数值或用which生成数值索引即可解决。

后续批量读取与合并

拿到keep_files后,可借助readxl包批量读取并合并文件:

library(readxl)
# 批量读取所有保留的Excel文件并合并为数据框
combined_data <- map_dfr(keep_files, read_excel)

# 导出合并结果为CSV
write_excel_csv(combined_data, "合并后的数据集.csv")
# 或导出为Excel文件
write_xlsx(combined_data, "合并后的数据集.xlsx")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 20:50:11