首页 > 解决方案 > dplyr top_n 返回多行

问题描述

Dplyr 提供了一个函数 top_n(),但是如果值相等,它会返回所有行(多于一个)。我想每组只返回一行。请参见下面的示例。

df <- data.frame(id1=c(rep("A",3),rep("B",3),rep("C",3)),id2=c(8,8,4,7,7,4,5,5,5))
df %>% group_by(id1) %>% top_n(n=1)

标签: rdplyr

解决方案


您可以使用arrange和的组合slice

df %>% 
  group_by(id1) %>% 
  arrange(desc(id2)) %>% 
  slice(1)

如果您想要 larges 元素,请在安排中使用descwith,否则将其排除在外。

显然也是slice_head您正在寻找的功能的新名称

df %>% 
  group_by(id1) %>% 
  arrange(desc(id2)) %>% 
  slice_head(id2, n=2)

推荐阅读