R语言按列表字符串匹配筛选dataframe子集的正确实现方法
基于列表列字符串匹配提取DataFrame子集
原有代码错误原因
筛选结果出错核心是两个问题:
%in%判断顺序写反:x %in% "fries"是判断向量x里的每一个元素是否等于"fries",会返回和x等长的逻辑向量,不是单一行是否匹配的布尔值,最终做行索引时会错位,混入不符合要求的行。- 没有做精确匹配校验:如果用模糊字符串匹配,会把
cajun_fries这类包含目标子串但值不相等的条目误判为匹配,把steak_function行错误筛入结果。
正确实现代码
以精确搜索"fries"为例,直接用以下代码即可:
# 定义要搜索的目标值 search_key <- "fries" # 逐行判断main列的向量中是否精确包含目标值,完成行筛选 func_sub <- df3[sapply(df3$main, function(vec) search_key %in% vec), ] # 按预期输出要求,将匹配行的main列替换为匹配到的目标值 func_sub$main <- search_key
运行结果
执行上述代码后得到的输出和预期完全一致:
functions main 1 burger_function (desc) fries
拓展用法:如果需要一次性匹配多个关键词,只需要把
search_key改为目标向量即可,比如search_key <- c("fries", "water"),不需要修改判断逻辑,就能同时筛出包含fries的burger_function行、包含water的fish_function行。
内容的提问来源于stack exchange,提问作者Munrock
相关产品推荐
相关产品推荐

