Получить верхний 80-й процентиль каждого класса - PullRequest
0 голосов
/ 11 июня 2018

Я пытаюсь написать однострочную строку в R, которая находит верхние записи в каждом классе в кадре данных.Я нашел этот превосходный пример использования mtcars() для такого случая.

Я буду придерживаться того же примера, когда мой класс "cyl", и я пытаюсь добраться доверхние значения столбца "hp".

Ответ, данный на предыдущий вопрос, дает "Верхние значения N" с помощью функции голова / хвост.

require(data.table)
d <- data.table(mtcars, key="cyl")
d[, head(.SD, 3), by=cyl]

Я пытаюсь сделатьточно так же, используя проценты.например, верхние 80-процентные строки hp (ранжированные по порядку от наибольшего до наименьшего hp) для каждого класса.

Есть ли способ включить процентную перспективу в функцию data.table выше?

1 Ответ

0 голосов
/ 11 июня 2018
d <- d[order(cyl,-hp)]
d[,.SD[hp >= quantile(hp, 0.8)], by = cyl]


    cyl  mpg  disp  hp drat    wt  qsec vs am gear carb
 1:   4 30.4  95.1 113 3.77 1.513 16.90  1  1    5    2
 2:   4 21.4 121.0 109 4.11 2.780 18.60  1  1    4    2
 3:   4 21.5 120.1  97 3.70 2.465 20.01  1  0    3    1
 4:   6 19.7 145.0 175 3.62 2.770 15.50  0  1    5    6
 5:   6 19.2 167.6 123 3.92 3.440 18.30  1  0    4    4
 6:   6 17.8 167.6 123 3.92 3.440 18.90  1  0    4    4
 7:   8 15.0 301.0 335 3.54 3.570 14.60  0  1    5    8
 8:   8 15.8 351.0 264 4.22 3.170 14.50  0  1    5    4
 9:   8 14.3 360.0 245 3.21 3.570 15.84  0  0    3    4
10:   8 13.3 350.0 245 3.73 3.840 15.41  0  0    3    4

Или с dplyr:

library(dplyr)
d %>% 
  group_by(cyl) %>% 
  filter(hp >= quantile(hp, 0.8))
...