group_by过滤以共享至少一个匹配值的组

时间:2019-01-28 17:20:20

标签: r filter group-by dplyr

筛选出不共享指定列的至少一个值的数据框中的分组观察。

我只想保留至少两个观测值具有相同年龄的组。

{{1}}

所以最终的data.frame应该只包含住户== 1, 并应如下所示:

id家庭年龄
 1 1 19
 2 1 19
 3 1 45

2 个答案:

答案 0 :(得分:1)

我们可以查看每个组的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-y方式:

df %>%
  group_by(household) %>%
  filter(n() > n_distinct(age))

答案 1 :(得分:0)

尝试一下:

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)
title_size = ObjectProperty('50dp')
相关问题