Как извлечь ровно три наблюдения с наибольшим количеством - PullRequest
0 голосов
/ 27 января 2019

Как извлечь только три наблюдения, которые являются главными наблюдениями по некоторой переменной, напр.count (n var в примере данных ниже)?Я хотел бы избежать упорядочения строк, поэтому я подумал, что могу использовать dplyr::min_rank.

ex <- structure(list(code = c("17.1", "6.2", "151.5", "78.1", "88.1", 
"95.1", "45.2", "252.2"), id = c(1, 2, 3, 4, 5, 6, 7, 8), n = c(6L, 
5L, 8L, 10L, 6L, 3L, 4L, 6L)), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -8L))

ex %>% 
  filter(min_rank(desc(n)) <= 3)

Но если есть связи, он может дать более 3 наблюдений.Например, приведенная выше команда возвращает пять строк:

# A tibble: 5 x 3
  code     id     n
  <chr> <dbl> <int>
1 17.1      1     6
2 151.5     3     8
3 78.1      4    10
4 88.1      5     6
5 252.2     8     6

Как я могу извлечь ровно 3 наблюдения?(независимо от того, какое наблюдение возвращается в случае связей)

Ответы [ 2 ]

0 голосов
/ 27 января 2019

В базе R мы можем использовать

ex[tail(order(ex$n),3), ]
0 голосов
/ 27 января 2019

Мы можем использовать row_number, который может принимать столбец в качестве аргумента

ex %>% 
  filter(row_number(desc(n)) <= 3)
# A tibble: 3 x 3
#   code     id     n
#   <chr> <dbl> <int>
#1 17.1      1     6
#2 151.5     3     8
#3 78.1      4    10
...