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