Группировка по 1 непрерывному и нескольким логическим значениям - PullRequest
0 голосов
/ 28 декабря 2018

У меня есть данные следующим образом:

eg_data <- data.frame(
id = c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4),
date = c("11/1", "11/1", "11/2", "11/1", "11/5", "11/5", "11/4", "11/5", "11/4", "11/2", "11/4", "11/3", "11/3", "11/2", "11/3", "11/2", "11/1", "11/1", "11/2", "11/3"),
sales = c(2,3,2,3,4,5,4,5,6,2,3,4,7,6,5,4,6,4,3,5),
dupes = c(F,T,F,T,F,F,F,T,T,F,F,F,T,F,T,F,F,T,T,F),
dupes2 = c(F,F,F,T,F,F,F,T,F,F,F,F,F,F,F,F,F,F,F,F))

дубликаты - дубликаты по дате, dupes2 - дубликаты по дате + продажи

Мне нужно отметить все случаи, где dupes = TRUE и dupes2 =ЛОЖНЫЙ.Мне нужно, чтобы это было сделано на уровне ID, т.е. это условие существует один раз для id = 1, каждая строка, где id = 1, будет помечена как результат.

Я пробовал что-то вроде:

eg_data <- eg_data %>% group_by(id, dupes=TRUE, dupes2=FALSE) %>% mutate(flag=1)

Это, очевидно, не работает, но это идея.Для всех идентификаторов, в которых есть какая-либо строка, где dupe = T и dupe2 = F, пометите все итерации этого идентификатора с помощью 1.

Конечным результатом будут данные, приведенные выше, в столбце с именем flag, который = 1, b /c для каждого идентификатора 1-4 существует хотя бы одна строка, в которой dupes = T и dupes2 = F. Мне нужно добавить столбец в набор данных, а не фильтровать его в список для печати, а не создавать отдельный набор данных.

Я рассмотрел

dplyr group_by логические значения

и

Функции группировки (tapply, by, aggregate) и* Применимая семья

, но и не сделал это для меня.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 29 декабря 2018

Согласно Op, напишите в ответ, используя any

eg_data = eg_data %>% group_by(id) %>% mutate(flag=any(dupes&!dupes2))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...