如何应用grepl来匹配数据框中多个列中的值?

时间:2019-06-12 17:46:09

标签: r sapply grepl

我想检查是否在另一列的字符串中找到了数据框中的一列字符串。我能够正确地对单个行执行此操作,但是当我将其应用于整个数据框时,某些行的结果不正确。

示例数据df

col1   col2
XYZ    XYZXYZ
ABC    BCABCA
XX     XYXY

我使用以下代码对各个行进行模式匹配:

grepl(df[1,1], df[1,2], fixed = TRUE)

我使用以下代码将其应用于整个数据框:

df$col3 <- sapply(df$col1, grepl, df$col2)

在这种情况下,第3列应为:TRUETRUEFALSE

2 个答案:

答案 0 :(得分:1)

grepl未向量化pattern。我们可以使用str_detect

library(stringr)
str_detect(df$col2, df$col1)
#[1]  TRUE  TRUE FALSE

答案 1 :(得分:0)

使用mapply,将grepl应用于每个col1col2的前几个元素。

df$col3 <- mapply(grepl, df$col1, df$col2)
df
#   col1   col2  col3
# 1  XYZ XYZXYZ  TRUE
# 2  ABC BCABCA  TRUE
# 3   XX   XYXY FALSE