首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R fuzzyjoin循环遍历列表

R fuzzyjoin循环遍历列表
EN

Stack Overflow用户
提问于 2021-11-04 00:46:00
回答 1查看 35关注 0票数 0

我是R的新手,我一直在尝试模糊匹配两个大型数据集,而不会使我的计算机崩溃。一开始我花了很长时间,所以我把数据帧分割成一个列表,并使用了purrr:map,但这仍然需要很长时间,而且不起作用。

因此,现在我在两个数据集中使用拆分名称,然后逐个列表循环。

假设我有两个数据集。

代码语言:javascript
复制
list.a <- data.frame(name=c("aa","bb","cc","dd","ee","ff","gg") )
list.b <- data.frame(name=c("ab","cb","ff","dd","ee","ff","gg"))

我用第一个字符串将名字分成子串,然后按字母表拆分。

代码语言:javascript
复制
list.a <- list.a %>%
  mutate(id_a=str_sub(name, 1,1))

list.b <- list.b %>%
  mutate(id_a=str_sub(name, 1,1))

list.a <- split(list.a, list.a$id_a)
list.b <- split(list.b, list.b$id_a)

此拆分函数将根据名称的第一个字母提供拆分数据的列表。

这就是让我头疼的部分,我不知道该怎么做。我尝试通过名称的a,b,c,d进行模糊匹配(所以名称在两个集合中都以a开头,然后移到b name,依此类推)。

我正在尝试通过'name‘对两个数据集中以相同字母表开头的每个列表进行模糊连接。

代码语言:javascript
复制
purrr::map(list.a, ~stringdist_inner_join(x=., y=list.b, 
                                               by="name", 
                                               ignore_case=FALSE,
                                               method="jw",
                                               max_dist=0.25))

我的预期输出是,一旦这些数据集通过模糊匹配连接在一起,最后就会将它们组合在一起。

谢谢你的建议!

EN

回答 1

Stack Overflow用户

发布于 2021-11-04 02:08:18

我不确定您的预期输出是什么,但这里有一个使用Reduce的可能解决方案。这个解决方案不像您在示例中那样使用split

代码语言:javascript
复制
library(tidyverse)
library(fuzzyjoin)

list.a <- data.frame(name=c("aa","bb","cc","dd","ee","ff","gg") )
list.b <- data.frame(name=c("ab","cb","ff","dd","ee","ff","gg"))

list.a <- list.a %>%
  mutate(id_a=str_sub(name, 1,1))

list.b <- list.b %>%
  mutate(id_a=str_sub(name, 1,1))

join_dfs <- function(df1, df2){
  stringdist_semi_join(x = df1, 
                       y = df2,
                       by = "id_a",
                       ignore_case = F,
                       method = "jw",
                       max_dist = 0.25)
}


all <- list(list.a, list.b)

Reduce(join_dfs, all)

这为我们提供了:

代码语言:javascript
复制
  name id_a
1   aa    a
3   cc    c
4   dd    d
5   ee    e
6   ff    f
7   gg    g
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69833334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档