我需要最好使用 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", …Run Code Online (Sandbox Code Playgroud) 我在解决一项练习时遇到困难:
有一家餐厅,供应他们最喜欢的啤酒。
(是的,我们实际上在学校有这个:D)
我有 2 个可以使用的表:
我的解决方案是:OnStock % Favoritebeer
MySQL 中没有像 DIVISION 这样的东西。我有什么想法可以解决这个问题吗?我在维基百科上找到了以下内容:http : //en.wikipedia.org/wiki/Relational_algebra#Division_.28.C3.B7.29这正是我需要的,但我很难用 SQL 翻译它。
编辑:
这里的示例数据:http : //www.sqlfiddle.com/#!2/34e00
结果应该是:
Bucher Rolf
Mastroyanni Pepe
Meier Hans
Meier Hanspeter
Meier Hansruedi
Müller Heinrich
Peters Peter
Zarro Darween
Run Code Online (Sandbox Code Playgroud) 类似于这个问题,但增加了皱纹。我只想过滤在组的任何行的特定列中具有两个(或全部几个)值的行组。
例如,假设我有这个数据框:
df <- data.frame(Group=LETTERS[c(1,1,1,2,2,2,3,3,3,3)], Value=c(5, 1:4, 1:4, 5))
Run Code Online (Sandbox Code Playgroud)
我想要那些字母,其中任何字母都有对应值为 4 的行和对应值为 5 的行,所以:
Group Value
<fct> <dbl>
1 C 2
2 C 3
3 C 4
4 C 5
Run Code Online (Sandbox Code Playgroud)
我能做到这一点与一对any内部调用filter是这样的:
df %>%
group_by(Group) %>%
filter(any(Value == 4),
any(Value == 5))
Run Code Online (Sandbox Code Playgroud)
有没有办法在一行中进行过滤器调用?像:(注意这不起作用,all_of不是真正的功能)
df %>%
group_by(Group) %>%
filter(all_of(Value == 4 & Value == 5))
Run Code Online (Sandbox Code Playgroud)