从数据框中的一列获取某些值

时间:2020-11-07 10:19:02

标签: r dplyr

让我们采用众所周知的数据集-航班。

我希望有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可能会出现问题,但如果没有它也无法正常工作。

2 个答案:

答案 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取代。