R语言如何匹配文件路径字符向量值到数据框指定行新列
问题原因
你的代码错误根源是for循环每次迭代都直接重写整个df$record列,上一轮匹配成功得到的结果会被下一轮的NA覆盖,最终仅保留最后一个文件的匹配结果。
解决方法
方法1:向量化写法(更高效,推荐)
利用sapply逐行匹配对应路径,无需手动写循环:
library(stringr) # 初始化record列为空字符型NA df$record <- NA_character_ # 仅对style_name为Title的行匹配对应文件路径 title_row <- df$style_name == "Title" df$record[title_row] <- sapply(tolower(df$text[title_row]), function(company) { # 返回第一个匹配到的文件路径,没有匹配则返回NA filenames[str_detect(tolower(filenames), company)][1] })
方法2:修正原有for循环逻辑
只更新匹配成功的行,不覆盖整个列:
library(stringr) df$record <- NA_character_ for (file in filenames) { # 定位当前文件匹配的、未赋值的Title行 match_pos <- df$style_name == 'Title' & str_detect(tolower(file), tolower(df$text)) & is.na(df$record) # 仅对匹配行赋值,保留其他行原有值 df$record[match_pos] <- file }
注意事项
如果存在多个文件包含同一个公司名的场景,以上两种写法默认返回第一个匹配到的文件路径,如有特殊需求可自行调整逻辑,比如拼接所有匹配路径、按文件生成时间筛选等。
内容的提问来源于stack exchange,提问作者KikiZ
相关产品推荐
相关产品推荐

