Создать новый столбец для отображения частичных совпадений строк в dplyr

Я пытаюсь создать новый столбец, чтобы показать, есть ли какое-либо соответствие между строками в двух столбцах моего фреймворка. Этот вопрос - это почти то, что я прошу, а вместо фильтрации, я хочу создать новый столбец, чтобы показать, есть ли совпадение или нет (TRUE или FALSE).

Итак, вот пример dataframe:

 transcript        target
 he saw the dog    saw
 she gave them it  gave
 watch out for     danger
 real bravery      brave

И я хочу создать новый столбец, показывающий любое совпадение между ними:

 transcript        target    match
 he saw the dog    saw        T
 she gave them it  gave       T
 watch out for     danger     F
 real bravery      brave      T

I предпочитает использовать dplyr (), но я открыт для других предложений!

3
задан 13 August 2018 в 14:44

2 ответа

Опцией может быть использование dplyr::rowwise() вместе с grepl для создания столбца соответствия как:

library(dplyr)

df %>% rowwise() %>%
  mutate(match  = grepl(target,transcript)) %>%
  as.data.frame()

#         transcript target match
# 1   he saw the dog    saw  TRUE
# 2 she gave them it   gave  TRUE
# 3    watch out for danger FALSE
# 4     real bravery  brave  TRUE

Данные:

df <- read.table(text = 
"transcript        target
'he saw the dog'    saw
'she gave them it'  gave
'watch out for'     danger
'real bravery'      brave",
header = TRUE, stringsAsFactors = FALSE)
1
ответ дан 15 August 2018 в 17:02

Вы попросили метод dplyr, но здесь также используется базовый метод R, использующий grepl:

df1$match <- mapply(grepl, df1$target, df1$transcript)

df1
        transcript target match
1   he saw the dog    saw  TRUE
2 she gave them it   gave  TRUE
3    watch out for danger FALSE
4     real bravery  brave  TRUE

, используя grepl внутри оператора dplyr mutate:

df1 %>% 
  mutate(match = mapply(grepl, target, transcript))

        transcript target match
1   he saw the dog    saw  TRUE
2 she gave them it   gave  TRUE
3    watch out for danger FALSE
4     real bravery  brave  TRUE
2
ответ дан 15 August 2018 в 17:02

Другие вопросы по тегам:

Похожие вопросы: