将dplyr与group_by一起使用,并对类别变量进行过滤

时间:2020-08-20 15:00:06

标签: r dplyr

R的新手。 我有一个大型的基于文本的df,我想对其进行一些检查。 我想检查一个向量(“颜色”)中的哪些变量在另一个向量中具有两个不同的变量(“ a”和“ b”)。这应该是AND而不是OR类型的查询。 df看起来像这样

数据

structure(list(colour = c("blue", "blue", "red", "red", "red", 
"purple", "purple"), letter = c("a", "c", "a", "m", "b", "a", 
"b")), class = "data.frame", row.names = c(NA, -7L))

colour letter
blue   a
blue   c
red    a
red    m
red    b
purple a
purple b

我认为最好的方法是通过子集设置,这样我就可以得到一个带有相关数据的新df('df2'),该数据应如下所示:

colour letter
red    a
red    b
purple a
purple b

我尝试了以下dplyr命令,但没有得到正确的结果('蓝色a'仍然存在)。

df2<-df%>%group_by(colour)%>%filter(letter %in% c('a','b'))

我将不胜感激!

1 个答案:

答案 0 :(得分:1)

@Configuration public class ArtemisConfig implements ArtemisConfigurationCustomizer { @Override public void customize(final org.apache.activemq.artemis.core.config.Configuration configuration) { configuration.addConnectorConfiguration("nettyConnector", new TransportConnfiguration(NettyConnectorFactory.class.getName())); configuration.addAcceptorConfiguration(new TransportConfiguration(NettyAcceptorFactory.class.getName())); } } 检查每个字母以查看它是否在集合{letter %in% c('a', 'b')a}中(也就是说,它将对每个字母返回true是b a),并保留它们。您要做的是检查组中是否同时存在b组中的a

b

从您的文字或示例中尚不清楚,如果一个组包含df %>% group_by(colour) %>% filter('a' %in% letter & 'b' %in% letter) ## or, if you have more than a couple letters (maybe a vector of letters) df %>% group_by(colour) %>% filter(all(c('a', 'b') %in% letter)) a和另一个字母,例如b,该怎么办。上面的代码将保留整个组,只要其中包含ca

如果您只想保留组中的ba字母(如果还有更多的话),请同样保留您的过滤条件:

b

如果您只想保留具有... filter(all(c('a', 'b') %in% letter), letter %in% c('a', 'b')) a且没有其他字母的组,那么我可以这样做:

b