Мутировать фрейм данных(True/False), когда строка содержит

#r #dataframe #dplyr

Вопрос:

У меня есть фрейм данных, подобный этому,

образец 1
Моя машина черная это черный
Моя машина красная красные
Моя машина желтая Желтый
Моя машина зеленая Черный

и я хочу проверить, включены ли данные столбца 1 в образец столбца.

Ожидаемый df:

образец 1 2
Моя машина черная это черный Правда
Моя машина красная красные Ложный
Моя машина желтая Желтый Правда
Моя машина зеленая Черный Ложный

Я пытался создать это с помощью функции for loop, но это не работает.

Ответ №1:

Вы можете использовать str_detect то, что векторизовано поверх строки и шаблона.

 library(dplyr)
library(stringr)

df <- df %>% mutate(X2 = str_detect(sample, X1))
df

#            sample       X1    X2
#1  My car is black is black  TRUE
#2    My car is red  are red FALSE
#3 My car is yellow   yellow  TRUE
#4  My car is green    black FALSE
 

В базе R вы можете использовать Vectorize grepl .

 df$X2 <- Vectorize(grepl)(df$X1, df$sample)
 

Ответ №2:

Вы можете использовать grepl

 df %>%
  rowwise %>%
  mutate(X2 = grepl(X1,sample))

  sample           X1       X2   
  <chr>            <chr>    <lgl>
1 My car is black  is black TRUE 
2 My car is red    are red  FALSE
3 My car is yellow yellow   TRUE 
4 My car is green  black    FALSE
 

Ответ №3:

Мы можем использовать

 library(data.table)
library(stirngr)
setDT(df)[, X2 := str_detect(sample, X1)]