Hier ist ein Ansatz mit dem stringdist
Paket.
# Your data sample, plus a couple of extra rows
dat = data.frame(x=c(1,'bat','tap','tap','tapes','tapped'),
y=c(2,'bad','ta','tape','tapes','tapas'))
dat
x y
1 1 2
2 bat bad
3 tap ta
4 tap tape
5 tapes tapes
6 tapped tapas
library(stringdist)
# Distance methods available in stringdist
dist.methods = c("osa", "lv", "dl", "hamming", "lcs", "qgram",
"cosine", "jaccard", "jw", "soundex")
# Try all the methods with the sample data
sapply(dist.methods, function(m) stringdist(dat[,1],dat[,2], method=m))
osa lv dl hamming lcs qgram cosine jaccard jw soundex
[1,] 1 1 1 1 2 2 1.0000000 1.0000000 1.00000000 1
[2,] 1 1 1 1 2 2 0.3333333 0.5000000 0.22222222 0
[3,] 1 1 1 Inf 1 1 0.1835034 0.3333333 0.11111111 1
[4,] 1 1 1 Inf 1 1 0.1339746 0.2500000 0.08333333 0
[5,] 0 0 0 0 0 0 0.0000000 0.0000000 0.00000000 0
[6,] 3 3 3 Inf 5 5 0.3318469 0.5000000 0.30000000 1
Oder mit adist
, wie @thelatemail vorgeschlagen:
apply(dat, 1, function(d) adist(d[1], d[2]))
[1] 1 1 1 1 0 3
adist
verwendet die Levenshtein Abstand, äquivalent dem lv
Methode oben. Dies ist wahrscheinlich die Methode, die Sie wollen.
Erläuterungen zu den verschiedenen Entfernungsmethoden finden Sie unter this web page.
zuerst einige Ihrer Code hinzufügen. http://stackoverflow.com/help/how-to-ask –
Siehe '? agrep' und'? adist' – thelatemail