我有一个来自家庭收入民意调查的数据框,如下所示:
ID Income Expense
001 2389.9 1400.5
003 5499.3 2309.2
.. .. ..
*这是一个例子,实际的观察结果超过5k
我希望能够:
1)我已经尝试过了,但这不是我想要的,我想知道每十分之一的房屋百分比:
> Deciles<-quantile(DF$Income, prob = seq(0, 1, length = 11), type = 5)
> Deciles
0% 10% 20% 30% 40% 50% 60%
231.89 9024.48 13308.24 16945.15 21071.38 25661.58 31607.07
70% 80% 90% 100%
40360.98 52927.98 77926.47 1634433.60
2)对于第二部分,我希望得到这样的东西:
ID Income Expense Decile
001 2389.9 1400.5 3
003 5499.3 2309.2 5
009 2245.0 1789.2 3
.. .. .. ..
谢谢!
答案 0 :(得分:1)
我认为你在询问是否存在与分位数相反的函数,按比例缩放并且天花板返回分布中每个观测值的十进制数(1-10)。您可以使用ecdf
,也可以自己编写。我看起来像这样:
# using my convention, decile 1 is highest value. Swap -x for x if you want to change it
get_decile <- function(x) ceiling(10*rank(-x, ties.method="random") / length(x))
你可以用十分位数绘制平均收入:
# reproducible example!
your_df <- data.frame(id=1:1e3,
income=rnorm(1e3,5e4,2e4),
expense=rnorm(1e3, 3e4, 1e4))
your_df$income_decile <- get_decile(your_df$income)
library(ggplot2)
ggplot(your_df, aes(x=income_decile, y=income)) +
stat_summary(fun.y=mean, geom="line") +
scale_x_reverse(breaks=1:10)