列中的 R grep 模式

标签 r

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

df<- df%>%mutate(Matches=grepl(pattern,string))

并得到以下错误。

argument 'pattern' has length > 1 and only the first element will be used

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

是否有任何函数可以完成这项工作,或者我是否需要使用 for 循环并手动遍历每一行?

最佳答案

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

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

也可以使用 base R 中的 mapply 完成

df$Matches <- mapply(grepl, df$pattern, df$string)

数据

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

关于列中的 R grep 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41373724/

相关文章:

r - 评估时在错误的环境中调用match.call

r - 使用阈值识别重复数据

sql - RODBC sqlQuery() 在应该返回 varchar(MAX) 时返回 varchar(255)

r - 在文档中显示 knitr 代码块源

javascript - 如何在可滚动数据表中获取鼠标单击位置?

r - x轴字符的颜色部分

r - Shinydashboard 可以使用 Tabpanels 并具有导航栏吗?

r - summarise_each 已弃用 - 新 summarise_at 引发错误

r - 按单独组的中位数划分数据框中的组

r - R中的rasterStack的总和