我有以下示例数据:
targets <- c("der", "das")
candidates <- c("sdassder", "sderf", "fongs")
所需的输出:
我想找到sdassder
作为输出,因为它包含targets
(作为子字符串)的最多匹配项。
我尝试过的事情:
x <- sapply(targets, function(target) sapply(candidates, grep, pattern = target)) > 0
which.max(rowSums(x))
目标:
如您所见,我发现一些脏代码在技术上会产生结果,但我不认为这是最佳实践。我希望此问题适合此处,否则我将进行代码审查。
我尝试了mapply,do.call,external,但是没有找到更好的代码。
答案 0 :(得分:4)
我想您可以简化一下。
matches <- sapply(targets, grepl, candidates)
matches
# der das
# [1,] TRUE TRUE
# [2,] TRUE FALSE
# [3,] FALSE FALSE
并使用rowSums
查找匹配数:
rowSums(matches)
# [1] 2 1 0
candidates[ which.max(rowSums(matches)) ]
# [1] "sdassder"
(请注意,最后一部分并没有真正说明联系。)
如果您想查看每个候选人的个人匹配项,则始终可以手动应用名称,尽管这只是一种美学目的,对作品本身的添加很少。
rownames(matches) <- candidates
matches
# der das
# sdassder TRUE TRUE
# sderf TRUE FALSE
# fongs FALSE FALSE
rowSums(matches)
# sdassder sderf fongs
# 2 1 0
which.max(rowSums(matches))
# sdassder
# 1 <------ this "1" indicates the index within the rowSums vector
names(which.max(rowSums(matches)))
# [1] "sdassder"
答案 1 :(得分:3)
一个stringr
选项可能是:
candidates[which.max(rowSums(outer(candidates, targets, str_detect)))]
[1] "sdassder"
答案 2 :(得分:0)
我们可以将<AnimatedTextInput
style={[styles.textInput, animatedTranslateStyle]}
onChangeText={text => onChangeText(text)}
value={value}
placeholder="Search for an item"
enablesReturnKeyAutomatically
clearButtonMode={'always'}
returnKeyType="search"
selectionColor="red"
/>
粘贴在一起,并创建一个匹配的模式。
targets
在library(stringr)
str_c(targets, collapse = "|")
#[1] "der|das"
中使用它来计算匹配模式的次数。
str_count
获取最大值的索引,并将其从原始str_count(candidates, str_c(targets, collapse = "|"))
#[1] 2 1 0
的子集中
candidates