检查字符串是否包含vector中的所有元素? (R,dataframes,dplyr)

时间:2017-05-26 23:05:55

标签: r dplyr

我有一个数据框,其中一个名为names的列存储字符串

name
'Ana, Mari'
'John, Doe'
'Stuart, Matthews'

我有一个以未知顺序存储名称的向量。例如,

v <- c('Ana', 'Mari')
v <- c('Mari', 'Ana')

我想过滤包含向量中所有元素的所有单元格。有没有人知道可以做到这一点的功能?

到目前为止我有这个,但它正在检查单元格是否包含单元格中的任何元素(不要介意包含与向量不匹配的额外元素的单元格,但是向量中的所有元素都应该包含在单元格中。)

df <- df %>% filter(grepl(vector, col_name))

3 个答案:

答案 0 :(得分:2)

library(tidyverse) 
library(stringr)

df = data_frame(name = c('Ana, Mari','John, Doe', 'Stuart, Matthews'))
v <- c('Mari', 'Ana')

基地R:

df[sapply(strsplit(df$name, split=", "), function(str) all(v %in% str)), ]
       name
1 Ana, Mari

tidyverse

df %>%
  group_by(name) %>%
  filter(all(v %in% str_split(name, ", ", simplify=TRUE)))
       name
1 Ana, Mari

答案 1 :(得分:1)

你可以做到

df %>% filter(rowSums(mapply(grepl, x=list(name), pattern=v))==length(v))

答案 2 :(得分:0)

我们可以将str_detectfilter

一起使用
library(tidyverse)
df %>% 
     filter(str_detect(df$name, paste(v, collapse="|")))
# A tibble: 1 x 1
#       name
#      <chr>
#1 Ana, Mari