上下文
我有一个df
,其中id
指的是不同的人,fruits_eat
指的是该人吃的水果。另外,我有一个向量 fruits_list
存储水果列表。
问题
我想生成一个新变量fruits_in_list
来指示一个人是否吃了fruits_list
中的一个或多个水果,但我不知道如何实现它R。
我做了什么
我检查了一些答案,但没有一个与我的问题非常相关,例如。
- R Match character vectors
- Compare two character vectors in R
- https://stackoverflow.com/search?q=How+to+fuzzy+match+two+character+vectors
- How to run through list of keyword vectors and fuzzy match them to a different file (R)
- 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/