微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何通过R中的单词不是字母进行模糊匹配?

如何解决如何通过R中的单词不是字母进行模糊匹配?

我需要根据包含不完全匹配的名称的列合并两个数据集,有时是因为其中一列相对于另一列缺少名称。例如,在一列中我有 "Martín gallardo",而在另一列中我有 "Martín Ricardo gallardo"。另一个问题是在某些名字和姓氏中显示相反,例如 "Martín gallardo"一个中而 "gallardo Martín" 在另一个中。我如何使用 R 匹配它?我的第一个想法是在两者中都使用 str_split 并将一个集合中的每个分配给与另一个集合中的更多元素匹配的那个,但我不知道如何对此进行编码。

谢谢。

编辑:数据看起来像这样

A <- tibble(email=c("martingallardo23@gmail.com","raulgimenez@gmail.com"),name=c("martin","raul"),last_name=c("gallardo","gimenez"),full_name=c("martin gallardo","raul gimenez"))
A
#  A tibble: 2 x 4
#   email                      name   last_name full_name
#   <chr>                      <chr>  <chr>     <chr>          
# 1 martingallardo23@gmail.com martin gallardo  martin gallardo
# 2 raulgimenez@gmail.com      raul   gimenez   raul gimenez   

B <- tibble(email=c("martingallardo@gmail.com","raulgimenez2@gmail.com"),name=c("martin ricardo",full_name=c("martin ricardo gallardo","gimenez raul"),other_data=c("A","B"))
B
# A tibble: 2 x 5
#   email                    name           last_name full_name              other_data
#   <chr>                    <chr>          <chr>     <chr>                   <chr>     
# 1 martingallardo@gmail.com martin ricardo gallardo  martin ricardo gallardo A         
# 2 raulgimenez2@gmail.com   gimenez        raul      gimenez raul            B   

解决方法

这是一种进行连接的 tidyverse 方式。它基本上从 B 中找到 full_name ,它与 A 的常用词数量最多。 图书馆(tidyverse)

A1 <- tibble(
  nombre_completo = c("martin gallardo","raul gimenez")
  ) %>%
  mutate(
    id_A = row_number()
  )

B1 <- tibble(
  nombre_completo=c("martin ricardo gallardo","gimenez raul"),other_data=c("A","B")
  ) %>%
  mutate(
    id_B = row_number()
  )


A2 <- A1 %>%
  mutate(
    name_words = str_split(nombre_completo,pattern = " ")
  ) %>%
  unnest(cols = c(name_words))

B2 <- B1 %>%
  mutate(
    name_words = str_split(nombre_completo,pattern = " ")
  ) %>%
  unnest(cols = c(name_words)) %>%
  select(name_words,id_B )


left_join(A2,B2,by = "name_words") %>%
  group_by(nombre_completo,id_A,id_B) %>%
  count() %>% ungroup() %>%
  group_by(nombre_completo,id_A) %>%
  slice_max(order_by = n) %>%
  select("nombre_completo_A" = nombre_completo,id_B) %>%
  left_join(B1,by = "id_B")
,

为了匹配这两个数据集,我首先根据数据集 nombre_completo2 中的 A } 部分匹配数据集nombre_completo 中的同一列。然后我合并了两个数据集,以便将数据集 A 中的附加列添加到 B 的重构形式中。这就是我首先解释您想要的输出的方式,所以我希望它对您有用:

B

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。