列中的R grep模式

vij*_*hal 2 r

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

df<- df%>%mutate(Matches=grepl(pattern,string))
Run Code Online (Sandbox Code Playgroud)

并得到以下错误。

参数'pattern'的长度> 1,并且仅使用第一个元素

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

有没有执行此功能的函数,或者我需要使用for循环并手动遍历每一行吗?

akr*_*run 5

如果我们需要比较“串”,每行有“模式”,然后使用rowwise()从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
Run Code Online (Sandbox Code Playgroud)

它也可以用做mapply从base R

df$Matches <- mapply(grepl, df$pattern, df$string)
Run Code Online (Sandbox Code Playgroud)

数据

df <- data.frame(pattern = c("sl", "ab", "cd"),
       string = c("sling", "dare", "care"), stringsAsFactors=FALSE)
Run Code Online (Sandbox Code Playgroud)

  • 如果您希望使用纯`dplyr`,则可以使用以下几种方法的混合使用而无需`rowwise()`来获得更好的速度:`df%&gt;%mutate(Matches = mapply(grepl,pattern,string))`。 (3认同)