我需要最好使用 dplyr 和 R 找到不同群体之间的共同价值观。
从我的数据集来看:
group val
<fct> <dbl>
1 a 1
2 a 2
3 a 3
4 b 3
5 b 4
6 b 5
7 c 1
8 c 3
Run Code Online (Sandbox Code Playgroud)
预期输出是
group val
<fct> <dbl>
1 a 3
2 b 3
3 c 3
Run Code Online (Sandbox Code Playgroud)
因为所有组中只有数字 3 出现。
这段代码似乎不起作用:
# Filter the data
dd %>%
group_by(group) %>%
filter(all(val)) # does not work
Run Code Online (Sandbox Code Playgroud)
这里的示例解决了类似的问题,但具有定义的共享值向量。如果我不知道哪些是共享的怎么办?
虚拟示例:
# Reproducible example: filter all id by group
group = c("a", "a", "a",
"b", "b", "b",
"c", "c")
val = c(1,2,3,
3,4,5,
1,3)
dd <- data.frame(group,
val)
Run Code Online (Sandbox Code Playgroud)
group_by隔离每个组,因此我们无法很好地group_by(group)在组之间进行比较。相反,我们可以group_by(val)查看哪些拥有所有组:
dd %>%
group_by(val) %>%
filter(n_distinct(group) == n_distinct(dd$group))
# # A tibble: 3 x 2
# # Groups: val [1]
# group val
# <chr> <dbl>
# 1 a 3
# 2 b 3
# 3 c 3
Run Code Online (Sandbox Code Playgroud)
这是我们想要在动词data$column中使用的罕见情况之一dplyr-n_distinct(dd$group)明确引用未分组的原始数据以获取组的总数。(它也可以预先计算。)而 是n_distinct(group)使用通过管道传入 的分组数据filter,因此它给出了每个值的不同组的数量(因为我们group_by(val))。