根据总 R 创建百分位数

Creating percentiles against total 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
  )
)

我可以使用 cut2 函数将 week.pay 分成百分位数:

library(Hmisc)
cut2(df$week.pay, g = 4, levels.mean = FALSE)

我想按总薪酬的百分比分成四分位数。例如,在上面的数据中,总工资的 25% 是 1235。做一些数学运算,我发现如果我们查看 1 - 255 范围内的周工资总和,我们大约可以得到 25% 的金额.

我想知道每个四分位数的薪酬范围。我如何在 R 中快速完成此操作?

抱歉,我的标题不好 - 似乎无法正确表达我想要的内容。假期周末过后的星期一早上不太好:)。

谢谢!

我相信您要实现的目标是

cut(
    x = df$week.pay
    , breaks = quantile(
         df$week.pay
         , probs = seq(0, 1, 0.25)
         , names = FALSE
         , type = 7)
    , include.lowest = TRUE
)

带有此 probs 参数的 quantile 函数将为您计算四分位数。随后 cut 将根据这些四分位数更改您的初始数据向量。

注意关于如何计算分位数/四分位数的 type 参数。

我想你问的是累积工资的四分位数。正如您所注意到的,我们需要将总薪酬除以四才能得到四分位数。这样我们就可以得到工资的四分位数:

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。