Расширенная фильтрация групп [dубликат]

У меня есть данные с переменной группировки («from») и значениями («число»):

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

Я хочу подмножить данные и выбрать группы, которые имеют два или более уникальных значения. По моим данным, только группа 2 имеет более одного отдельного «числа», поэтому это желаемый результат:

from number
   2      1
   2      2
6
задан 21 March 2018 в 18:34

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
4
ответ дан 15 August 2018 в 15:47
  • 1
    Хорошие альтернативы (я думал n_distinct, но оставил его для вас :)), хотя последний, вероятно, вводит в заблуждение, поэтому я бы не использовал его – David Arenburg 27 July 2015 в 13:58

Использование концепции дисперсии, разделяемой Дэвидом, но выполняющей ее dplyr way:

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
1
ответ дан 15 August 2018 в 15:47

Другие вопросы по тегам:

Похожие вопросы: