如何在R语言中匹配目录文件名与CSV列中的名称
解决R脚本中文件名匹配与下载状态统计的问题
步骤1:优化文件读取与数据框初始化
先修正初始代码,给数据框列命名,方便后续处理:
library(tidyverse) library(readxl) # 读取目录下的jpg相关文件并转为数据框 file_names <- list.files(path = "peaches/", pattern = "jpg", all.files = TRUE, full.names = TRUE, recursive = TRUE) %>% as.data.frame(stringsAsFactors = FALSE) %>% rename(file_path = ".") # 给列命名为file_path
步骤2:提取目标文件名子串
针对peaches//fruit/1234/12pink.jpg.txt这类路径,提取12pink核心名称:
# 精准匹配后缀提取:去掉末尾的.jpg.txt file_names <- file_names %>% mutate(core_name = basename(file_path) %>% str_remove("\\.jpg\\.txt$"))
如果文件名后缀有变动,可用通用正则提取数字+字母的核心部分:
# 通用提取规则:匹配数字加字母的核心名称 file_names <- file_names %>% mutate(core_name = str_extract(basename(file_path), "\\d+[a-zA-Z]+"))
步骤3:匹配Excel数据并生成下载状态表
将提取的核心文件名与Excel中的名称列匹配,标记下载状态并导出结果:
# 读取Excel数据 name_data <- read_excel("peaches/all_data.xlsx") # 匹配并生成下载状态表(替换"名称列"为你Excel中实际的列名) download_status <- name_data %>% mutate(is_downloaded = ifelse(名称列 %in% file_names$core_name, "已下载", "未下载")) # 导出结果为新表格 write_excel_csv(download_status, "peaches/下载状态统计.csv")
补充:关联已下载文件路径
如果需要保留已下载文件的完整路径,可改用左连接实现:
download_status <- name_data %>% left_join(file_names, by = c("名称列" = "core_name")) %>% mutate(is_downloaded = ifelse(!is.na(file_path), "已下载", "未下载"))
内容的提问来源于stack exchange,提问作者blamchin
相关产品推荐
相关产品推荐

