匹配目录txt文件名与R dataframe列值并插入对应内容至匹配文件
实现思路
- 第一步:读取目标文件夹下所有txt文件,提取去掉后缀的文件名存入匹配列表
- 第二步:遍历数据框每一行,过滤出存在对应文件的记录
- 第三步:对匹配到的文件,读取原始内容后追加对应行的第二、第三列的列名和取值,重新写入文件即可
完整R代码
# 按需加载tidyverse包,也可以用base R实现 library(tidyverse) # ---------- 配置参数 --------------- # 替换为你的txt文件所在的文件夹实际路径 txt_folder <- "C:/xxx/your_txt_folder" # 替换为你的数据框对象名,默认数据框第一列为匹配字段,第二、第三列为要追加的字段 df <- your_dataframe_name # ---------- 匹配处理逻辑 ----------- # 获取文件夹内所有txt文件,提取无后缀的文件名 all_txt <- list.files(path = txt_folder, pattern = "\\.txt$", full.names = F) match_names <- str_remove(all_txt, "\\.txt$") # 遍历数据框每行做匹配处理 for (row in 1:nrow(df)) { current_key <- df[[1]][row] # 仅处理存在对应txt文件的行 if (current_key %in% match_names) { target_path <- file.path(txt_folder, paste0(current_key, ".txt")) # 读取原txt内容,可根据原文件的分隔符修改sep参数,制表符为"\t"、空格为" "、逗号为"," original_data <- read.delim(target_path, sep = "\t", header = T, stringsAsFactors = F) # 追加两列新字段 original_data[[names(df)[2]]] <- df[[2]][row] original_data[[names(df)[3]]] <- df[[3]][row] # 覆写原文件,建议运行前先备份所有原始txt文件避免数据丢失 write.delim(original_data, target_path, sep = "\t", row.names = F, quote = F) } }
注意事项
- 运行代码前务必先备份所有原始txt文件,避免误操作导致数据损坏
- 如果原txt文件没有表头,需要把
read.delim的header参数改为F,并手动处理表头追加逻辑 - 代码默认按列位置取第二、第三列,不需要修改数据框原有列名即可直接运行
内容的提问来源于stack exchange,提问作者Myke
相关产品推荐
相关产品推荐

