dat <- data.frame(ID = c(1, 2, 2, 2), Gender = c("Both", "Both", "Male", "Female"))
> dat
ID Gender
1 1 Both
2 2 Both
3 2 Male
4 2 Female
Для каждого идентификатора, если пол - Both
, Male
и Female
, я хочу удалить строку с Both
.То есть мои желаемые данные таковы:
ID Gender
1 1 Both
2 2 Male
3 2 Female
Я пытался сделать это, используя код ниже:
library(dplyr)
> dat %>%
group_by(ID) %>%
mutate(A = ifelse(length(unique(Gender)) >= 3 & Gender == 'Both', F, T)) %>%
filter(A) %>%
select(-A)
# A tibble: 2 x 2
# Groups: ID [1]
ID Gender
<dbl> <fctr>
1 2 Male
2 2 Female
Я объявляю фиктивную переменную с именем A
, где A = F
, если для данного ID
присутствуют все 3 элемента Gender
(«Оба», «Мужской» и «Женский»; это разные значения, которые Gender
может принимать, нетвозможно другое значение) и соответствующая строка имеет Gender == Both
.Тогда я удалю этот ряд.
Тем не менее, похоже, что я назначаю A = F
для первого ряда, хотя его Gender
- это только "Оба", но не "Оба", "Мужской" и "Женский"?