选择每组具有多个不同值的组

时间:2015-10-22 22:11:47

标签: r subset

我有以下数据:

ID  category class
1   a        m  
1   a        s
1   b        s
2   a        m
3   b        s
4   c        s
5   d        s

我想通过仅包含具有多个(> 1)不同类别的“ID”来对数据进行子集化。

我的预期输出:

ID  category class
1   a        m
1   a        s
1   b        s

有办法吗?

我试过

library(dplyr)
df %>% 
  group_by(ID) %>%
  filter(n_distinct(category, class) > 1)

但它给了我一个错误:

# Error: expecting a single value

1 个答案:

答案 0 :(得分:3)

使用data.table

library(data.table) #see: https://github.com/Rdatatable/data.table/wiki for more
setDT(data) #convert to native 'data.table' type by reference
data[ , if(uniqueN(category) > 1) .SD, by = ID]

uniqueNdata.table的{​​{1}}(快速)原生掩码,而length(unique())只是整个.SD(在更一般情况下,它是data.table可以表示列的子集,例如,当.SDcols参数被激活时。所以基本上中间语句(j,列选择参数)表示返回与ID相关联的所有列和行,其中至少有两个不同的category值。

使用by参数扩展到涉及多个列的计数的案例。