R Объединить 2 таблицы / фреймы данных путем частичного совпадения. - PullRequest
0 голосов
/ 25 июня 2018

У меня есть две таблицы / фреймы данных.
Первая таблица (ID) одна выглядит так:

enter image description here

Вторая таблица (имена) выглядит следующим образом:

enter image description here

Я хочу сопоставить переменную «IDTag» с первыми несколькими буквами переменной «Имя».В других языках программирования я выполнял бы foreach и пробегал каждый из IDTags для каждой из строк второй таблицы (сопоставляя IDTag с первыми n символами переменной «Name», где n - количество символов IDTagв вопросе.

В R кажется, что должен быть способ сделать это, и я посмотрел на pmatch и несколько других, но те или иные, кажется, не совпадают вообще, или когда я пытаюсьиспользовать их, придумать несколько NA в тех местах, где я бы их не ожидал (пример кода с использованием приведенных выше таблиц:

NameMatches <- Names[pmatch(
                  ID$IDTag,
                  Names$Name,
                  duplicates.ok = TRUE
                ),]

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

Редактирование исходного вопроса для ответа на комментарии ...

Ожидаемый результат будет выглядеть примерно такэто (то есть - все столбцы таблицы Имен с добавлением столбца группы из таблицы идентификаторов. Многократное совпадениеОжидается - отношения один ко многим между таблицами идентификаторов и имен): enter image description here

Спасибо,

1 Ответ

0 голосов
/ 25 июня 2018

Если вы открыты для использования пакета sqldf, то одним из вариантов будет просто написать объединение, используя предоставленную вами логику:

library(sqldf)
sql <- "SELECT * FROM ID t1 INNER JOIN Names t2
        ON t2.Name LIKE t1.IDTag || '%'"

output <- sqldf(sql)

Примечание. Если вы хотите сохранить все строки из фрейма данных ID независимо от того, соответствуют ли они чему-либо в Names, используйте вместо этого левое соединение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...