частичное совпадение двух столбцов таблицы разных данных со строкой - PullRequest
0 голосов
/ 18 марта 2019

У меня есть две большие таблицы данных, df1 с одним столбцом (полное имя)

full.name  
brad pitt
shah rukh khan       
salman khan
taylor swift
justin bieber
xyz abc

и df2 с двумя именами столбцов и возрастом

name         age
brad         10
shah         15
salman khan  20
taylor       30
justin       25

и мой желаемый результат -

full.name            name          age
brad pitt            brad          10
shah rukh khan       shah          15
salman khan          salman khan   20
taylor swift         taylor        30
justin bieber        justin        25

но я хотел сопоставлять столбец только по строке до сих пор я использовал inner_join(), но он работал для тех значений, которые точно совпадали, поэтому я хочу сопоставить по строке

Ответы [ 2 ]

3 голосов
/ 18 марта 2019

пример данных

library( data.table )

dt1 <- fread("full.name
brad pitt
             shah rukh khan       
             salman khan
             taylor swift
             justin bieber
             xyz abc", sep = "%")

dt2 <- fread('name,         age
brad,         10
shah,         15
salman khan,  20
taylor,       30
justin,       25')

код

library( fuzzyjoin )
regex_left_join( dt1, dt2, by = c( full.name = "name" ) )

выход

#         full.name        name age
# 1:      brad pitt        brad  10
# 2: shah rukh khan        shah  15
# 3:    salman khan salman khan  20
# 4:   taylor swift      taylor  30
# 5:  justin bieber      justin  25
# 6:        xyz abc        <NA>  NA
0 голосов
/ 18 марта 2019

Для решения, использующего только data.table, вы можете попробовать:

df2[, full := lapply(name, function(x) grep(x, df1[, full.name], value = TRUE) )]

А для получения внутреннего объединения вы можете добавить:

df2[lapply(full, length)>0, ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...