如何从R列表的data.frame中移除同一文件夹下的重复文件?
解决R列表中重复文件夹文件的保留问题
需求说明
处理包含多个data.frame的R列表,确保每个文件夹下仅保留一个文件;其中STATUS和XSTATUS对应的YELLOW文件夹各存在两个文件,需移除时间较早的条目(保留时间戳最新的文件)。
解决方案代码
library(tidyverse) # 定义单个data.frame的清理函数 clean_df <- function(df) { df %>% mutate( # 提取文件夹名称(如RED、YELLOW) folder = str_extract(FileName, "(?<=//)[A-Z]+(?=/)"), # 提取时间戳(格式为YYYYMMDD_HHMMSS) timestamp = str_extract(FileName, "\\d{6}_\\d{6}") ) %>% # 按文件夹分组,保留时间戳最大的行(最新文件) group_by(folder) %>% filter(timestamp == max(timestamp)) %>% ungroup() %>% # 移除辅助列,还原原结构 select(FileName) } # 遍历列表处理每个data.frame output <- map(input, clean_df)
代码解释
- 关键信息提取:
- 正则表达式
(?<=//)[A-Z]+(?=/)精准匹配//与/之间的文件夹名称 \\d{6}_\\d{6}提取文件名中的日期时间戳,该格式的字符串可直接按大小判断时间先后
- 正则表达式
- 去重逻辑:按文件夹分组后,筛选出时间戳最大的条目,确保每个文件夹仅留一个最新文件
- 结构还原:移除临时生成的
folder和timestamp列,保证输出与输入的data.frame结构完全一致
结果验证
运行代码后,output将与示例中的期望输出完全匹配:
MASTER无重复条目,保持原样STATUS和XSTATUS中的YELLOW文件夹仅保留时间最新的文件
内容的提问来源于stack exchange,提问作者alice_hooper
相关产品推荐
相关产品推荐

