首页 > 解决方案 > 使用 R 中键的模糊匹配组合行

问题描述

我有一个数据集,其中可能包含一些非常相似的键——比如每个电子邮件地址的一行数据john.doe@foo.comjohn.m.doe@foo.com. 如何组合类似命名的键并在 R 中进行聚合?

样本输入

|Email              | Subscriptions |
-------------------------------------
|john.doe@foo.com   | 10            |
|john.m.doe@foo.com | 11            |
|jane.doe@foo.com   | 20            |

预期结果

|Email              | Subscriptions |
-------------------------------------
|john.doe@foo.com   | 21            |
|jane.doe@foo.com   | 20            |

我知道agrep并且很少有其他库可以进行模糊匹配,但是我如何使用它来组合数据集中的行?

标签: rcluster-analysis

解决方案


这是agrep与 结合使用的一种方法dplyr

df <- data.frame(mail = c("john.doe@foo.com", "john.m.doe@foo.com", "jane.doe@foo.com"),
                 sub = c(10, 11, 20))

df %>% 
  rowwise() %>% 
  mutate(new = paste(agrep(mail, df$mail, max = 2, ignore.case = TRUE), collapse = ",")) %>%
  group_by(new) %>% 
  mutate(sub = sum(sub)) %>%
  slice(1) 


  mail               sub new  
  <fct>            <dbl> <chr>
1 john.doe@foo.com    21 1,2  
2 jane.doe@foo.com    20 3   


推荐阅读