我有一个数据框,其中一列是模式,另一列是字符串。我想遍历每一行检查行的字符串是否包含行的模式并用 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/