Фильтрация всей группы содержит минимальное значение - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь отфильтровать группу, в которой содержится значение min x.Но я хотел бы сохранить всю группу.

Подобный пост здесь, но не для min value фильтрации Удалить группы, которые содержат определенные строки

Поэтому я пытаюсь

  df <-data.frame(x=c(250,240,233,250,100,10,250,100,1),gr=gl(3,3))

> df
    x gr
1 250  1
2 240  1
3 233  1
4 250  2
5 100  2
6  10  2
7 250  3
8 100  3
9   1  3

    df%>%
    group_by(gr)%>%
    filter(all(x==min(x)))

Возврат пустого df.Почему?

ожидаемый результат будет

    x  gr
7 250  3
8 100  3
9   1  3

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Базовый подход R может заключаться в нахождении соответствующего gr из min imum x и последующей фильтрации на основе этого кадра данных.

df[df$gr %in% df$gr[which.min(df$x)],]

#  x   gr
#7 250  3
#8 100  3
#9   1  3

Или аналогично вашему и @Подход Вэня с использованием ave

df[ave(df$x, df$gr, FUN = function(i) any(i == min(df$x))) == 1, ]
0 голосов
/ 31 мая 2018

Вы должны использовать any вместо all

df%>%group_by(gr)%>%filter(any(x==min(df$x)))
# A tibble: 3 x 2
# Groups:   gr [1]
      x     gr
  <dbl> <fctr>
1   250      3
2   100      3
3     1      3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...