Фильтр по количеству различных значений в группе - PullRequest
0 голосов
/ 03 февраля 2019

У меня есть следующее df:

names    sex
adam      M
jill      F
stewart   M
jordan    M
alica     F
jordan    F

Как мне отфильтровать строки так, чтобы я получал только имена, которые являются и M, и F, в данном случае Джорданом.

Ответы [ 2 ]

0 голосов
/ 03 февраля 2019

Если все ваши данные похожи на это, вы можете просто найти строки с дублирующимися значениями:

dat[duplicated(dat$names),]

Пример:

> dat <- data.frame(names = c("adam", "jill", "stewart", "jordan", "alicia", "jordan"),
+                   sex = c("M", "F", "M", "M", "F", F)
+ )
> dat
    names   sex
1    adam     M
2    jill     F
3 stewart     M
4  jordan     M
5  alicia     F
6  jordan FALSE
> dat[duplicated(dat$names),]
   names   sex
6 jordan FALSE

или если вам нужен вектор имен:

> as.character(dat[duplicated(dat$names),]$names)
[1] "jordan"
0 голосов
/ 03 февраля 2019

Мы можем сгруппировать по «именам» и filter по «полу», имеющему unique количество элементов, превышающее 1

library(dplyr)
df %>% 
   group_by(names) %>%
   filter(n_distinct(sex) > 1)

Или другой вариант - сгруппировать по «именам»и filter группы, имеющие как 'М', так и 'F'

df %>%
  group_by(names) %>%
  filter(all(c("M", "F") %in% sex))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...