时间:2016-12-29 05:40:00

标签: r

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

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

并收到以下错误。

  

论证&#39>模式&#39;长度> 1,只使用第一个元素

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

是否有任何功能可以完成这项工作,或者我是否需要使用for循环并手动迭代每一行?

1 个答案:

答案 0 :(得分: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

也可以使用mapply

中的base R来完成
df$Matches <- mapply(grepl, df$pattern, df$string)

数据

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