选择每个组具有多个不同值的组 [英] Select groups with more than one distinct value per group

查看:15
本文介绍了选择每个组具有多个不同值的组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有如下数据:

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

推荐答案

使用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]

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

使用by参数可扩展到包含Counts ok多列的案例。

这篇关于选择每个组具有多个不同值的组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆