Как отфильтровать в верхнем для указанного столбца? - PullRequest
2 голосов
/ 28 марта 2019

Я пытаюсь найти верхний n цил по мере AVGMPG для каждого карбюратора, а затем опустить все остальное в кадре данных.Моя настоящая проблема заключается в определении лучших продавцов по рынку по показателю уровня закрытия.Надеюсь, это прояснит, что я пытаюсь сделать.Есть ли способ легко сделать это?

> mtcars.1 <- mtcars %>%
+   group_by(carb,cyl) %>%
+   summarise(AVGMPG = mean(mpg))
> mtcars.1
# A tibble: 9 x 3
# Groups:   carb [?]
   carb   cyl AVGMPG
  <dbl> <dbl>  <dbl>
1     1     4   27.6
2     1     6   19.8
3     2     4   25.9
4     2     8   17.2
5     3     8   16.3
6     4     6   19.8
7     4     8   13.2
8     6     6   19.7
9     8     8   15

Ответы [ 2 ]

1 голос
/ 28 марта 2019

Возможное решение с data.table

data(mtcars)          

setDT(mtcars)

mtcars[,AVGMPG := mean(mpg), keyby = list(carb, cyl)] 
mtcars[order(-AVGMPG),head(.SD, n = 3), by = carb][,.(carb, cyl, AVGMPG)]

    carb cyl AVGMPG
 1:    1   4  27.58
 2:    1   4  27.58
 3:    1   4  27.58
 4:    2   4  25.90
 5:    2   4  25.90
 6:    2   4  25.90
 7:    4   6  19.75
 8:    4   6  19.75
 9:    4   6  19.75
10:    6   6  19.70
11:    3   8  16.30
12:    3   8  16.30
13:    3   8  16.30
14:    8   8  15.00

Это вычисляет среднее значение mpg для carb и cyl, упорядочьте carb -группы по AVGMPG и выберитеtop 3 элементов, затем отбрасывает все остальные столбцы.

1 голос
/ 28 марта 2019

Мы можем попробовать

library(dplyr)
n <- 3
mtcars %>% 
   group_by(carb) %>% 
   mutate(AVGMPG = mean(mpg)) %>%  
   group_by(cyl) %>%     
   top_n(n, AVGMPG) %>%
   select(carb, cyl, AVGMPG)
...