过滤功能

Filter function

对于数据:

    Id    res
    1     9
    1     8
    1     8
    1     6
    1     5
    1     4
    2     6
    2     6
    2     0
    2     0
    2     0
    2     0

我要每组前四名。 当我使用

dat %>% group_by(Id) %>%
       top_n(4,res)

我明白了

Id    res 
1     9 
1     8 
1     8 
1     6 
2     6
2     6 
2     0 
2     0 
2     0 
2     0

这里需要一个过滤方法。什么是合适的过滤逻辑,以便我只得到前四行(允许并列)

据我所知top_nreturns更多行如果平局。

也许这有帮助?

dat %>% group_by(Id) %>% arrange(desc(res)) %>% filter(row_number()<=4)

  Id res
1  1   9
2  1   8
3  1   8
4  1   6
5  2   6
6  2   6
7  2   0
8  2   0

您也可以简单地使用head,这里使用data.table包:

library(data.table)
setDT(df)[, head(res,4), Id]

或根据@Jack Wheeler 正确下划线:

setDT(df)[, .SD[1:4], by = Id]