Как применить grepl для сопоставления значений в нескольких столбцах во фрейме данных? - PullRequest
1 голос
/ 12 июня 2019

Я хотел бы проверить, находится ли строка в одном столбце в моем фрейме данных в строке в другом столбце.Я могу сделать это для отдельных строк правильно, но когда я применяю его ко всему фрейму данных, результаты для некоторых строк не корректны.

Пример данных 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 в этом случае должен быть: TRUE, TRUE, FALSE.

Ответы [ 2 ]

1 голос
/ 12 июня 2019

grepl не векторизовано для pattern с.Мы можем использовать str_detect

library(stringr)
str_detect(df$col2, df$col1)
#[1]  TRUE  TRUE FALSE
0 голосов
/ 12 июня 2019

Используйте mapply, который применяется grepl к первым элементам каждого col1, col2.

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