让我们采用众所周知的数据集-航班。
我希望有10个航班,其功能arr_time的大小分别为最大和最低。
我试图以这种方式做到这一点:
library(dplyr)
#Highest values
flights %>%
group_by(air_time) %>%
top_n(10, air_time)
#Smallest values
flights %>%
group_by(air_time) %>%
top_n(-10,air_time)
但是问题是我得到了非常奇怪的东西。这两个结果是相同的。我认为使用group_by
可能会出现问题,但如果没有它也无法正常工作。
答案 0 :(得分:1)
尝试使用dplyr中的slice_min / _max函数:
library(dplyr)
library(nycflights13)
data(flights)
#Largest values
flights %>%
dplyr::slice_max(order_by = arr_time, n = 10)
#Smallest values
flights %>%
dplyr::slice_min(order_by = arr_time, n = 10)
答案 1 :(得分:1)
如果您想按arr_time
来排名前10位的值,则不应按此分组。试试:
library(dplyr)
flights %>%
top_n(10, air_time) %>%
select(air_time) %>%
arrange(air_time)
# air_time
# <dbl>
# 1 671
# 2 671
# 3 675
# 4 676
# 5 676
# 6 679
# 7 683
# 8 686
# 9 686
#10 691
#11 695
和
flights %>%
top_n(-10, air_time) %>%
select(air_time) %>%
arrange(air_time)
# air_time
# <dbl>
# 1 20
# 2 20
# 3 21
# 4 21
# 5 21
# 6 21
# 7 21
# 8 21
# 9 21
#10 21
#11 21
#12 21
#13 21
#14 21
#15 21
#16 21
top_n
保持联系,因此您两人都获得了10行以上。另外,top_n
已被取代,并被slice_min
/ max
取代。