У меня есть таблица с тысячами строк.
Пример данных:
user_id ZIP City email
105 100051 Lond. [email protected]
382 251574 [email protected]
225 0100051 London [email protected]
Мне нужно сравнить каждого пользователя с другими, чтобы узнать, какие из них похожи.
В приведенном примере пользователь 105 и 225 практически одинаков, поэтому ожидаемым результатом будет столбец нового идентификатора, который соответствует двум из них, например:
user_id ZIP City email new_id
105 100051 Lond. [email protected] 105
382 251574 [email protected] 382
225 0100051 London [email protected] 105
Как бы я сравнивал каждое поле с другими и знал, как их сравнивать, например, кластеризация?
Ваши электронные письма:
email<-c("[email protected]","[email protected]","[email protected]")
Расстояние между электронными письмами:
dist<-stringdistmatrix(email,email,method="jw")
dist[dist==0]<-1
Минимальное расстояние между электронными письмами:
cbind(email,email_near=email[apply(dist, 1, which.min)],dist=apply(dist, 1, FUN=min))
email email_near dist
[1,] "[email protected]" "[email protected]" "0.208754208754209"
[2,] "[email protected]" "[email protected]" "0.281746031746032"
[3,] "[email protected]" "[email protected]" "0.208754208754209"
После этого я предлагаю использовать порог на dist, чтобы идентифицировать ближайшие электронные письма, а затем вычислить new_ID.
@
и сравнить детали самостоятельно.
agrep
чтобы найти все совпадения: например,sapply(dat$email,agrep,dat$email,value=T)
даст вам совпадения для электронной почты