在dplyr中过滤仅包含特定值组合的群组

11

假设有一张如下的表格:

  id value
1  1     a
2  2     a
3  2     b
4  2     c
5  3     c

我希望筛选出:

a) 只具有值a的id,例如id1。

b) 同时包含a和b的id,例如id2。

数据:

data.frame(id = c(1,2,2,2,3), value = c("a", "a", "b", "c", "c"))
2个回答

19

Try

a)

df %>% group_by(id) %>% filter(all(value == "a"))

b)
df %>% group_by(id) %>% filter(all(c("a", "b") %in% value))

它给我抛出了一个错误,如下所示:在all(c("a", "a", ... :将类型为“字符”的参数强制转换为逻辑值。 - chopin_is_the_best
@VincenzoGrasso,出了点问题,我一会儿更新。 - talat
4
对于(b),您可以使用 df%>% group_by(id)%>% filter(any(value ==“a”)&any(value ==“b”)) - Sam Dickson
@VincenzoGrasso,请查看我的更新并再次检查。 - talat
1
@SamDickson,谢谢,这是另一种可能性,但是如果您有大量的需要查找的值,那么键入的工作量可能会很大。 - talat

0

这里有一种替代方法,可以同时用于a)和b)

df %>% group_by(id) %>% arrange(value) %>% summarize(value=paste(value,collapse="")) %>% filter(grepl("ab",value))

结果:

     id value
  (dbl) (chr)
1     2   abc

希望这能有所帮助


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接