Если ID содержит все элементы в векторе, верните TRUE для этого ID в dplyr - PullRequest
1 голос
/ 24 апреля 2020

Я пытаюсь получить все идентификаторы, содержащие все три раза (4,5,6), чтобы возвращать ИСТИНА для каждой строки этого идентификатора.

id <- c(1,1,1,1,2,2,2,2,3,3,3,3)
time <- c(3,4,6,7,2,3,4,6,4,5,6,7)
df1 <- data.frame(id,time)

solution <- c(FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,TRUE,TRUE,TRUE)
df_w_sol <- data.frame(df1,solution)

Я думаю, что код будет похож на:

df1 %>%
group_by(id)%>%
mutate(if_else(time==c(4,5,6),TRUE, FALSE))

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

1 Ответ

2 голосов
/ 24 апреля 2020

Здесь нам нужно filter с all. Создайте логический вектор с %in% и оберните с all, чтобы получить один выходной сигнал ИСТИНА / ЛОЖЬ после группировки по 'id'

library(dplyr)
df1 %>%
    group_by(id) %>% 
    filter(all(4:6 %in% time))

ПРИМЕЧАНИЕ. ОП создал matrix с cbind , Чтобы создать data.frame, используйте конструктор data.frame. Кроме того, логический вектор TRUE/FALSE («решение») должен быть без кавычек, т.е. TRUE или FALSE вместо "TRUE" или "FALSE"

data

df1 <- data.frame(id, time)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...