列中的R grep模式

列中的R grep模式,r,R,我有一个数据框,其中一列是模式,另一列是字符串。我想迭代每一行,检查行的字符串是否包含行的模式,并用T/F状态更新Matches列 我试过了 df%变异(匹配=grepl(模式,字符串)) 并得到以下错误 参数“pattern”的长度大于1,将只使用第一个元素 我知道在上面的代码中,grepl试图读取模式列的所有行,而不是当前行 是否有任何函数可以执行此任务,或者我需要使用for循环并手动迭代每行?如果我们需要比较每行中的“字符串”和“模式”,请使用rowwise()fromdplyr lib

我有一个数据框,其中一列是模式,另一列是字符串。我想迭代每一行,检查行的字符串是否包含行的模式,并用T/F状态更新Matches列 我试过了

df%变异(匹配=grepl(模式,字符串))
并得到以下错误

参数“pattern”的长度大于1,将只使用第一个元素

我知道在上面的代码中,grepl试图读取模式列的所有行,而不是当前行


是否有任何函数可以执行此任务,或者我需要使用for循环并手动迭代每行?

如果我们需要比较每行中的“字符串”和“模式”,请使用
rowwise()
from
dplyr

library(dplyr)
df %>% 
    rowwise() %>% 
    mutate(Matches = grepl(pattern, string))    
# A tibble: 3 × 3
#  pattern string Matches
#    <chr>  <chr>   <lgl>
#1      sl  sling    TRUE
#2      ab   dare   FALSE
#3      cd   care   FALSE
数据
df请展示一个小的可复制示例和经验输出。如果每个行模式都应该与同一行中的“string”匹配,那么请尝试
df$Matches,或者如果需要使用
dplyr
,那么
df%>%rowwise()%%>%mutate(Matches=grepl(pattern,string))
谢谢,如果您想继续使用纯-
dplyr
,我不知道rowwise函数,您可以在不使用以下方法的情况下获得更好的速度:
df%>%mutate(Matches=mapply(grepl,pattern,string))
library(dplyr)
df %>% 
    rowwise() %>% 
    mutate(Matches = grepl(pattern, string))    
# A tibble: 3 × 3
#  pattern string Matches
#    <chr>  <chr>   <lgl>
#1      sl  sling    TRUE
#2      ab   dare   FALSE
#3      cd   care   FALSE
df$Matches <- mapply(grepl, df$pattern, df$string)
df <- data.frame(pattern = c("sl", "ab", "cd"),
       string = c("sling", "dare", "care"), stringsAsFactors=FALSE)