选择具有多个不同值的组

问题描述 投票:0回答:3

我有带有分组变量(“来自”)和值(“数字”)的数据:

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

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

from number
   2      1
   2      2
r subset difference
3个回答
7
投票

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

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
函数来实现 data.table
开发版本
(或使用
length(unique(number)) > 1
代替

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

6
投票

你可以试试

 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

1
投票

使用 David 共享的方差概念,但以 dplyr 方式进行:

library(dplyr) 
df %>% 
   group_by(from) %>% 
   filter(var(number) != 0)

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

       #from number
   #1    2      1
   #2    2      2
© www.soinside.com 2019 - 2024. All rights reserved.