#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)]