Есть ли способ сгруппировать переменную group_by, str_detect в каждой группе и сохранить результат, полученный в новом столбце? - PullRequest
0 голосов
/ 04 апреля 2019

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

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

т.е. Если хотя бы одна строка в группе содержит строку, значение в новом столбце для каждой строки в группе должно быть TRUE.Если ни одна строка в группе не содержит строку, значения группы в новом столбце должны быть FALSE.

library(dplyr)
library(stringr)

df <- tibble(
    A=c('red','red','red','blue','blue','blue'),
    B=c('yes','no','no','no','no','no')
)

Например, при попытке отдельно определить строку «да» в столбце Bдля групп red и blue столбца A

df %>%
    group_by(A) %>%
    mutate(yes_in_group = ifelse(str_detect(B, 'yes'), TRUE, FALSE))

я ожидал бы, что каждое значение yes_in_group будет TRUE для группы red и FALSEдля blue, но mutate не относится к группам.

expected <- tibble(A=c('red','red','red','blue','blue','blue'),
                   B=c('yes','no','no','no','no','no'),
                   yes_in_group=c(TRUE, TRUE, TRUE, FALSE, FALSE, FALSE))

actual <- tibble(A=c('red','red','red','blue','blue','blue'),
                 B=c('yes','no','no','no','no','no'),
                 yes_in_group=c(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE))

1 Ответ

1 голос
/ 04 апреля 2019

Ваше текущее использование ifelse ничего не делает: вы берете вывод str_detect(), который равен TRUE / FALSE, и конвертируете его в TRUE / FALSE.Чтобы распространить результат на всю группу, вы можете использовать any:

library(dplyr)
library(stringr)

df %>%
    group_by(A) %>%
    mutate(yes_in_group = any(str_detect(B, 'yes')))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...