r - 如何模糊匹配r中的两个字符向量

标签 r matching stringr grepl fuzzy

上下文

我有一个df,其中id指的是不同的人,fruits_eat指的是该人吃的水果。另外,我有一个向量 fruits_list 存储水果列表。

问题

我想生成一个新变量fruits_in_list来指示一个人是否吃了fruits_list中的一个或多个水果,但我不知道如何实现它R。

我做了什么

我检查了一些答案,但没有一个与我的问题非常相关,例如。

  1. R Match character vectors
  2. Compare two character vectors in R
  3. https://stackoverflow.com/search?q=How+to+fuzzy+match+two+character+vectors
  4. How to run through list of keyword vectors and fuzzy match them to a different file (R)
  5. Matching strings with abbreviations; fuzzy matching

可重现的代码

fruits_Jack = c('XXappleYYY,lemon,orange,pitaya')
fruits_Rose = c('Navel orange,Blood orange,watermelon,cherry')
fruits_Biden= c('pitaya,cherry,banana')

fruits_list = c('apple', 'lemon', 'orange', 'watermelon', 'peach', 'pear')

df = 
  data.frame(id         = c('Jack', 'Rose', 'Biden'),
             fruits_eat = c(fruits_Jack, fruits_Rose, fruits_Biden))

> df
     id                                  fruits_eat
1  Jack                   apple,lemon,orange,pitaya
2  Rose Navel orange,Blood orange,watermelon,cherry
3 Biden                        pitaya,cherry,banana


预期输出

df_expect = cbind(df, fruits_in_list = c(1, 1, 0))

> df_expect
     id                                  fruits_eat fruits_in_list
1  Jack                   apple,lemon,orange,pitaya              1
2  Rose Navel orange,Blood orange,watermelon,cherry              1
3 Biden                        pitaya,cherry,banana              0

最佳答案

使用stringr,使用str_detect,或者如果您想要真正的计数,则使用str_count:

library(stringr)
library(dplyr)
df %>% 
  mutate(fruits_in_list = +(str_detect(fruits_eat, paste0(fruits_list, collapse = "|"))),
         count = str_count(fruits_eat, paste0(fruits_list, collapse = "|")))
     id                                  fruits_eat fruits_in_list count
1  Jack              XXappleYYY,lemon,orange,pitaya              1     3
2  Rose Navel orange,Blood orange,watermelon,cherry              1     3
3 Biden                        pitaya,cherry,banana              0     0

关于r - 如何模糊匹配r中的两个字符向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73598175/

相关文章:

algorithm - 断开图中的最大二分匹配

python - 使用正则表达式重新字符串匹配提取 URL 链接 - Python

r - 根据单独列中的字符串匹配,有条件地替换多列中的值

R - 获取向量中最大 n 个元素的索引的最快方法

r - ggpattern 自定义图例/手动刻度图案

r - 将两个 xts 时间序列合并到一个流中

r - 文本替换——模式是一组字符串[r]

R:将 mapply 用于两个向量的函数

rust - 切片上的模式匹配

r - 匹配并提取r中的子字符串