过滤整个组包含最小值

时间:2018-05-31 01:27:36

标签: r dplyr

我尝试过滤包含min x值的组。但我想保留整个小组。

此处有类似帖子,但不适用于min value过滤 Remove groups that contain certain strings

所以我试试

  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 :(得分:1)

您应该使用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

答案 1 :(得分:1)

基础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, ]

的@和Wen的方法
checkForUpdate()