R частичное совпадение строк игнорировать пробелы всенаправленные - PullRequest
0 голосов
/ 27 сентября 2018

У меня проблема с частичным совпадением строк.У меня есть пары людей, и мне нужно сравнить их имена.Для этого я запустил charmatch в обоих направлениях для двух фамилий, чтобы увидеть, является ли name1 частью name2, и наоборот.У меня есть небольшой набор данных ниже, чтобы продемонстрировать вопрос.Я использую charmatch ниже;Я также использовал pmatch, и он возвращает тот же результат.

Когда charmatch говорит ищет совпадения для поиска совпадений для элементов своего первого аргумента среди элементов его второго ... Я понимаю, что это означает, что он будет обрабатывать каждую группу символов в element1как образец n, посмотрите, существует ли такая же группа в element2.Но это, очевидно, не то, что происходит, похоже, что это специфическое направление.

Так ... это специфическое направление?И если так ... что еще я могу использовать, чтобы сделать то, что я описываю?Мой EG имена каламбур предполагал, что я действительно сталкиваюсь с множеством фамилий, где у мужа есть его имя, а у жены есть ее + муж.Мне нужно знать, существует ли фамилия мужа в фамилии жены.

Я знаю, что это можно сделать с помощью регулярных выражений, но я не знаком с ними, возможно, так и должно быть, но я не знаком,Я бы предпочел ответ, который не использует регулярные выражения.

eg_data <- data.frame(name1 = c('Jimmy Conway', 'Jimmy'), 
name2 = c('Conway','Jimmy Conway'))

eg_data$share_name1 <- mapply(charmatch, eg_data$name1, eg_data$name2)
eg_data$share_name2 <- mapply(charmatch, eg_data$name2, eg_data$name1)
eg_data$share_name <- 0
eg_data$share_name [(eg_data$share_name1==1 | eg_data$share_name2==1)] 
<- 1

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Это может быть полезно

> with(eg_data, intersect(name1, name2))
[1] "Jimmy Conway"
0 голосов
/ 27 сентября 2018

Те же две строки, обнаружение только строки, а не сопоставление символов.

eg_data$share_name1 <- mapply(str_detect,eg_data$name1, eg_data$name2)
eg_data$share_name2 <- mapply(str_detect,eg_data$name2, eg_data$name1)

ИЛИ даже

eg_data$share_name1 <- ifelse(mapply(str_detect,eg_data$name1, eg_data$name2)==TRUE,1,0)
eg_data$share_name2 <- ifelse(mapply(str_detect,eg_data$name2, eg_data$name1)==TRUE,1,0)

Спасибо всем, кто посмотрел.Я надеюсь, что это помогает другим.

...