过滤功能

时间:2015-05-21 18:58:58

标签: r dplyr

对于数据:

    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

此处需要过滤方法。什么是适当的过滤器逻辑,所以我只得到前四行(允许绑定)

2 个答案:

答案 0 :(得分:5)

据我所知top_n如果关系会返回更多行。

也许这有帮助?

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

答案 1 :(得分:1)

您也可以使用head,此处使用data.table包:

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

或者根据@Jack Wheeler的正确强调:

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