R十分位百分比绘图
Posted
技术标签:
【中文标题】R十分位百分比绘图【英文标题】:R Decile percentage plotting 【发布时间】:2015-07-07 19:05:28 【问题描述】:我有一个来自家庭收入民意调查的数据框,如下所示:
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
.. .. .. ..
谢谢!
【问题讨论】:
试试as.integer
你的十分位数
当你说“我已经尝试过了,但这不是我想要的:”,你应该解释为什么这不是你想要的 - 它与你想要的有什么不同输出?
@nrussell 谢谢!我想要两个知道的是每十分之一的房屋数量
每十分之一的房屋比例不总是10%吗?
【参考方案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)
【讨论】:
为什么不使用ntile()
?这也是一种分法,不是吗?
@l_m_ ntile()
是什么?
R中用于deciling的函数以上是关于R十分位百分比绘图的主要内容,如果未能解决你的问题,请参考以下文章