Объединить два data.frame, используя частично совпадающие строки - PullRequest
0 голосов
/ 11 июля 2019

У меня есть следующие два data.frames

df1 <- data.frame(name = "RANDI FIRAT CAYLIOGLU", correct = 30)
df2 <- data.frame(name = "FIRAT CAYLIOGLU", id = 01)

У некоторых людей есть три имени со вторым именем, и иногда они используют свое имя, иногда используют свое второе имя. По моему опыту, regex_join функция пакета fuzzyjoin не фиксирует такое частичное совпадение. Как объединить два набора данных, используя частично совпадающие имена?

1 Ответ

1 голос
/ 11 июля 2019

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

df1 <- data.frame(name="RANDI FIRAT CAYLIOGLU", correct = 30, stringsAsFactors = F) 
df2 <- data.frame(name="FIRAT CAYLIOGLU",id = 01, stringsAsFactors = F)

libray(dpylr)
df1%>%
  mutate(name2 = sub("^[A-Za-z]+ ", "", name)) %>%
  full_join(df2, by = c("name2" = "name"))

                   name correct           name2 id
1 RANDI FIRAT CAYLIOGLU      30 FIRAT CAYLIOGLU  1

Если это также может быть отчество, вы можете создать дополнительный столбец name3, который содержит только имена и фамилии:

libray(dpylr)
    df1%>%
      mutate(name2 = sub("^[A-Za-z]+ ", "", name),
             name3 = sub(" [A-Za-z]+ ", " ", name) %>%
      left_join(df2, by = c("name2" = "name")) %>%
      left_join(df2, by = c("name3" = "name"))

Здесь name2 - это просто второе имя и фамилия, а name3 содержит имя и фамилию.

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