提问人:smoff 提问时间:5/3/2023 更新时间:5/3/2023 访问量:55
使用 Adist 确定哪个元素只需要删除
use adist to determine which element only needs deletions
问:
我有这个 (y) 和一个 (x),我想比较一下,看看哪个 y 最适合 x,如果只考虑删除。vector
strings
string
x = "PCOR1"
y = c("PCor", "TCor", "TMMON", "INTMAX")
到目前为止,我尝试使用的是,但它导致了奇怪的结果:adist
adist(x,y,costs=c(substitutions = 0, insertions = 0, deletions = 1), ignore.case=TRUE)
[,1] [,2] [,3] [,4] [1,] 1 1 0 0
我可以仔细看看这个做法:
drop(attr(adist(x,y,costs=c(substitutions = 0, insertions = 0, deletions = 1), ignore.case=TRUE, counts=TRUE),"counts"))
ins del sub [1,] 0 1 0 [2,] 0 1 1 [3,] 0 0 5 [4,] 1 0 5
现在告诉我,如果我做对了,我需要一次删除才能从“PCOR1”到“PCor”,一次删除和一次替换才能从“TCOR1”到“TCor”,依此类推。
如果我将插入和替换设置为 0,为什么会返回此值?有没有办法只使用删除?adist
我期望这样的事情:
[,1] [,2] [,3] [,4] [1,] 1 0 0 0
答:
1赞
Sotos
5/3/2023
#1
如果它是原始字符串的子集,您似乎想返回它。在这种情况下应该足够了,即grepl()
sapply(y, grepl, x, ignore.case = TRUE)
# pcor tcor tmmon intmax
# TRUE FALSE FALSE FALSE
或
sapply(y, grepl, x, ignore.case = TRUE) * 1
#PCor TCor TMMON INTMAX
# 1 0 0 0
评论
0赞
smoff
5/4/2023
不完全是。我需要确定是否包含任何 ,忽略大小写并允许最多删除两次,但不允许替换或插入。这是因为可能是另一个,例如它可能是“M”,当然,无论如何,它都是 Thanks for the reply 中所有字符串的子集y
x
x
string
y
评论