Фильтр group_by для групп, которые имеют хотя бы одно совпадающее значение - PullRequest
0 голосов
/ 28 января 2019

Отфильтровать сгруппированные наблюдения в кадре данных, которые не разделяют хотя бы одно значение указанного столбца.

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

df<-data.frame(list(id = c(1,2,3,4,5,6),
                household = c(1, 1, 1, 2, 2, 2), 
                age= c(19, 19, 45, 2,15,50))`

, поэтому окончательный кадр данных должен включать только домохозяйство == 1 и долженвыглядят как:

возраст домохозяйства
1 1 19
2 1 19
3 1 45

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Мы можем посмотреть длину age для каждой группы и сравнить ее с длиной unique(age).Если length(age) > length(unique(age)) хотя бы два из наблюдений имеют общий возраст.

library(dplyr)

df %>%
  group_by(household) %>%
  filter(length(age) > length(unique(age)))

#      id household   age
#   <dbl>     <dbl> <dbl>
# 1     1         1    19
# 2     2         1    19
# 3     3         1    45

@ Dave2e указал еще один более dplyr -й способ сделать это:

df %>%
  group_by(household) %>%
  filter(n() > n_distinct(age))
0 голосов
/ 28 января 2019

Попробуйте это:

library(dplyr)
df <- data.frame(list(id = c(1,2,3,4,5,6),
                    household = c(1, 1, 1, 2, 2, 2), 
                    age= c(19, 19, 45, 2,15,50)))
df %>%
  filter(household == 1)
...