选择具有多个不同值的组

时间:2015-07-27 09:08:54

标签: r subset difference

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

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

我希望对数据进行子集化,并选择具有两个或更多唯一值的组。在我的数据中,只有第2组有多个不同的“数字”,所以这是理想的结果:

from number
   2      1
   2      2

3 个答案:

答案 0 :(得分:6)

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

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

基本上,我们每组检查是否有任何差异,如果TRUE,则返回组值

使用基数R,我会选择

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

修改:对于非数字数据,您可以针对uniqueN的{​​{3}}尝试新的data.table函数(或使用length(unique(number)) > 1代替< / p>

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

答案 1 :(得分:4)

你可以尝试

 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

答案 2 :(得分:1)

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