我有一个数据框,其中一列是模式,另一列是字符串。我想遍历每行,检查行的字符串是否包含行的模式,并用我尝试过的T / F状态更新Matches列
df<- df%>%mutate(Matches=grepl(pattern,string))
Run Code Online (Sandbox Code Playgroud)
并得到以下错误。
参数'pattern'的长度> 1,并且仅使用第一个元素
我知道在上面的代码grepl中尝试读取模式列的所有行而不是当前行。
有没有执行此功能的函数,或者我需要使用for循环并手动遍历每一行吗?
如果我们需要比较“串”,每行有“模式”,然后使用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)