Dplyr top\n返回多行

Dplyr top\n返回多行,r,dplyr,R,Dplyr,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) df%group\u by(id1)%%>%top\u 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)
df%group\u by(id1)%%>%top\u n(n=1)

您可以使用
排列
切片

df %>% 
  group_by(id1) %>% 
  arrange(desc(id2)) %>% 
  slice(1)
如果您希望使用larges元素,请将
desc
与in-arrange一起使用,否则将其忽略

显然,
slice\u head
也是您正在寻找的函数的新名称

df %>% 
  group_by(id1) %>% 
  arrange(desc(id2)) %>% 
  slice_head(id2, n=2)
对参数
使用
slice\u max()
,参数=FALSE

library(dplyr)

df %>%
  group_by(id1) %>%
  slice_max(id2, with_ties = FALSE)

# A tibble: 3 x 2
# Groups:   id1 [3]
  id1     id2
  <chr> <dbl>
1 A         8
2 B         7
3 C         5
库(dplyr)
df%>%
分组依据(id1)%>%
切片最大值(id2,带=FALSE)
#一个tibble:3x2
#分组:id1[3]
id1 id2
1 A 8
2 B 7
3 C 5

如果您不想记住这么多易于更改的
{dplyr}
函数名,我可以为此类任务推荐
{data.table}
包。另外,速度更快

require(data.table)

df
top\n
基于哪个列<代码>id1
id2
?仅供参考:
top\n
已被取代。您应该使用
slice\u max
instead或
slice\u head
您只需要每个组的第一行。您可以对每个组中的值进行排序,只需取最上面的值。我尝试了这一点,现在意识到另一个包覆盖了slice函数。感谢您的回答
slice\u head()
不会对数据进行排序。它只是前n行的子集。