【问题标题】:Select groups with more than one distinct value per group [duplicate]选择每组具有多个不同值的组[重复]
【发布时间】:2015-10-22 22:11:47
【问题描述】:

我有如下数据:

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

【问题讨论】:

    标签: r subset


    【解决方案1】:

    使用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.tablelength(unique()) 的(快速)本机掩码,而.SD 只是整个data.table(在更一般的情况下,它可以表示列的子集,例如,当.SDcols 参数已激活)。所以基本上中间语句(j,列选择参数)表示返回与ID 关联的所有列和行,其中至少有两个不同的category 值。

    使用by 参数扩展至涉及counts ok multiple columns的情况。

    【讨论】:

      猜你喜欢
      • 2015-10-17
      • 1970-01-01
      • 1970-01-01
      • 2023-01-16
      • 2020-08-04
      • 2021-07-30
      • 2021-07-30
      • 2021-12-14
      • 1970-01-01
      相关资源
      最近更新 更多