在R语言中筛选非空列表ID及AhoCorasickTrie匹配问题
筛选AhoCorasickSearch结果中非空列表的行ID
嘿,我看你已经用AhoCorasickTrie包完成了关键词匹配,现在需要从返回的SearchNew列表里找出那些有匹配结果(非空列表)的行索引对吧?这事儿不难,咱们直接通过判断每个子列表的长度来筛选就行:
Base R 实现方式
用基础R的sapply遍历SearchNew,判断每个子列表是否非空,再用which提取对应的索引:
# 获取所有非空匹配结果的行ID non_empty_match_ids <- which(sapply(SearchNew, function(sub_list) length(sub_list) > 0))
Tidyverse 风格实现(依赖purrr包)
如果你平时习惯用tidyverse的工具,用purrr的map_lgl可以更简洁地完成判断:
library(purrr) non_empty_match_ids <- which(map_lgl(SearchNew, ~ length(.x) > 0))
额外小提醒
我注意到你的关键词里写的是"8 "(带空格),但你的data[,1]是数值类型的列,这可能会导致匹配不到目标行哦!如果你的需求是匹配数值8,建议把关键词改成"8",或者先把数据列转换成字符类型再搜索,比如:
# 先将第1列转为字符型再执行搜索 SearchNew <- AhoCorasickSearch(c("13","8"), as.character(data[,1]))
这样调整后,就能正确匹配到数值为8的行啦。
内容的提问来源于stack exchange,提问作者caroline
相关产品推荐
相关产品推荐

