我有一份雇主和雇员的数据集。每个员工都有工资。 使用汇总函数,我能够通过雇主汇总工资总额,以获得每个雇主的工资总额的单点估算。 现在,我想展示每个雇主的收入分配,从而想要制作百分位数。
我编写了这段代码,它产生了整体数据的百分位数。我想要每个雇主的百分位数
pct <- quantile(salary, c(0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1)
然后我再次尝试聚合,但R不喜欢这个
aggregate (pct, by = list(employer), FUN=length)
说实话,我不知道在这里分配什么。我只是选择了长度。
我已经阅读了这个问题的结果 Quantiles by factor levels in R 但编程超出了我的理解
谢谢
答案 0 :(得分:2)
您可以使用tapply
函数计算分位数:
# Making sample data...
set.seed(144)
dat <- data.frame(employer=c(rep("A", 100), rep("B", 100)),
salary=rnorm(200))
# Compute salary quantiles for each employer
tapply(dat$salary, dat$employer, quantile, probs=seq(0, 1, .1))
# $A
# 0% 10% 20% 30% 40% 50% 60% 70%
# -2.41444189 -1.40732877 -1.12317885 -0.64970145 -0.47523453 -0.09430894 0.15215525 0.35878949
# 80% 90% 100%
# 0.65762946 1.08900468 2.60805224
#
# $B
# 0% 10% 20% 30% 40% 50% 60% 70%
# -2.94139814 -1.27564687 -0.95004621 -0.57881100 -0.31022591 -0.14494699 -0.02373928 0.50534378
# 80% 90% 100%
# 0.92179302 1.41398773 1.98714112
要将其全部放入一个数据框进行输出,您可以使用相同的参数,但使用aggregate
函数:
aggregate(dat$salary, list(dat$employer), quantile, probs=seq(0, 1, .1))
# Group.1 x.0% x.10% x.20% x.30% x.40% x.50% x.60% x.70%
# 1 A -2.41444189 -1.40732877 -1.12317885 -0.64970145 -0.47523453 -0.09430894 0.15215525 0.35878949
# 2 B -2.94139814 -1.27564687 -0.95004621 -0.57881100 -0.31022591 -0.14494699 -0.02373928 0.50534378
# x.80% x.90% x.100%
# 1 0.65762946 1.08900468 2.60805224
# 2 0.92179302 1.41398773 1.98714112