我有一个数据框,其中一个名为names的列存储字符串
name 'Ana, Mari' 'John, Doe' 'Stuart, Matthews'
我有一个以未知顺序存储名称的向量。例如,
v <- c('Ana', 'Mari')
v <- c('Mari', 'Ana')
我想过滤包含向量中所有元素的所有单元格。有没有人知道可以做到这一点的功能?
到目前为止我有这个,但它正在检查单元格是否包含单元格中的任何元素(不要介意包含与向量不匹配的额外元素的单元格,但是向量中的所有元素都应该包含在单元格中。)
df <- df %>% filter(grepl(vector, col_name))
答案 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_detect
与filter
library(tidyverse)
df %>%
filter(str_detect(df$name, paste(v, collapse="|")))
# A tibble: 1 x 1
# name
# <chr>
#1 Ana, Mari