对于数据:
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
此处需要过滤方法。什么是适当的过滤器逻辑,所以我只得到前四行(允许绑定)
答案 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]