#r #percentile
#r #процентиль
Вопрос:
Я пытаюсь разделить свои данные на процентили. Во-первых, вот несколько примеров данных:
df <- data.frame(
employee.first.name = c ('Jim', 'John', 'James', 'Jack', 'Jill', 'Kathy',
'Kim', 'Kelly', 'Karl', 'Larry', 'Lemon', 'Lime',
'Man', 'Mark', 'Mary', 'Miss', 'Molly',
'Matthew', 'Nancy', 'Nelly'),
week.pay = c(401, 70, 58, 130, 483, 464, 84, 327, 208,
254, 306, 393, 270, 54, 279, 390, 144,
97, 125, 403
)
)
Я могу разбить week.pay
на процентили, используя cut2
функцию:
library(Hmisc)
cut2(df$week.pay, g = 4, levels.mean = FALSE)
Я хотел бы разделить по процентам от общей заработной платы на квартили. Например, в приведенных выше данных 25% от общей суммы оплаты составляет 1235. Проведя некоторые расчеты, я могу обнаружить, что если мы посмотрим на сумму недельной зарплаты в диапазоне от 1 до 255, то примерно вернемся к сумме в 25%.
Я хотел бы знать диапазоны оплаты, которые соответствуют каждому квартилю. Как я могу быстро выполнить это в R?
Извините за мое бедное название — кажется, я не могу правильно сформулировать то, что я хочу. Утро понедельника после праздничных выходных складывается не слишком удачно :).
Спасибо!
Ответ №1:
Я думаю, вы спрашиваете о квартилях для совокупной оплаты. Как вы заметили, нам нужно разделить общую сумму оплаты на четыре, чтобы получить квартили. Таким образом, мы можем получить квартили с точки зрения оплаты:
sorted.pay <- sort(df$week.pay)
cum.pay <- cumsum(sorted.pay)
brk <- floor(cum.pay/(sum(sorted.pay/4)))
brk <- ifelse(brk > 3, 3, brk) # Include highest pay in 4th group
sapply(split(sorted.pay, brk), range)
# 0 1 2 3
# [1,] 54 270 390 403 # Min
# [2,] 254 327 401 483 # Max
table(brk)
# brk
# 0 1 2 3
# 10 4 3 3
Итак, 10 человек в самом низком квартиле получают зарплату от 54 до 254, в то время как 3 человека на вершине получают зарплату от 403 до 483. 10 нижних сотрудников получают 1/4 от общей заработной платы, а 3 верхних получают 1/4 от общей заработной платы.
Ответ №2:
Я считаю, что то, чего вы пытаетесь достичь, похоже на
cut(
x = df$week.pay
, breaks = quantile(
df$week.pay
, probs = seq(0, 1, 0.25)
, names = FALSE
, type = 7)
, include.lowest = TRUE
)
quantile
Функция с этим probs
аргументом вычислит квартили для вас. Впоследствии cut
вы измените свой исходный вектор данных в соответствии с этими квартилями.
Обратите внимание на type
аргумент о том, как вычисляются квантили / квартили.