Select 个具有多个不同值的组

Select groups with more than one distinct value

我有包含分组变量 ("from") 和值 ("number") 的数据:

from number
   1      1
   1      1
   2      1
   2      2
   3      2
   3      2

我想对具有两个或更多唯一值的数据和 select 组进行子集化。在我的数据中,只有第 2 组有多个不同的 'number',所以这是期望的结果:

from number
   2      1
   2      2

多种可能性,这是我最喜欢的

library(data.table)
setDT(df)[, if(+var(number)) .SD, by = from]
#    from number
# 1:    2      1
# 2:    2      2

基本上,我们检查每个组是否存在差异,如果 TRUE,则 return 组值


对于基础 R,我会选择

df[as.logical(with(df, ave(number, from, FUN = var))), ]
#   from number
# 3    2      1
# 4    2      2

Edit:对于非数值数据,您可以尝试新的 uniqueN 函数 for the devel version of data.table(或使用 length(unique(number)) > 1 而不是

setDT(df)[, if(uniqueN(number) > 1) .SD, by = from]

使用 David 共享的方差概念,但采用 dplyr 方式:

library(dplyr) 
df %>% 
   group_by(from) %>% 
   mutate(variance=var(number)) %>% 
   filter(variance!=0) %>% 
   select(from,number)

    #Source: local data frame [2 x 2]
    #Groups: from

       #from number
   #1    2      1
   #2    2      2

你可以试试

 library(dplyr)
 df1 %>% 
     group_by(from) %>%
     filter(n_distinct(number)>1)
 #    from number
 #1    2      1
 #2    2      2

或使用base R

 indx <- rowSums(!!table(df1))>1
 subset(df1, from %in% names(indx)[indx])
 #   from number
 #3    2      1
 #4    2      2

或者

  df1[with(df1, !ave(number, from, FUN=anyDuplicated)),]
  #   from number
  #3    2      1
  #4    2      2