基于变量B分类,显示变量A的百分位数。

4
我有一个数据集,长这样:
收入 财富
10.000 100000
15.000 111000
14.200 123456
12.654 654321

我还有更多的行。

现在,我想要找出在特定财富百分位数下的家庭收入是多少。以下分位数是相关的:

c(0.01,0.05,0.1,0.25,0.5,0.75,0.9,0.95,0.99)

我一直使用以下代码来获取特定百分位数值:

a <- quantile(WEALTH, probs = c(0.01,0.05,0.1,0.25,0.5,0.75,0.9,0.95,0.99))

但是现在我想以财富为基础来计算百分位数,但要获取相应的收入。我尝试了以下代码,但结果不可信:

df$percentile = ntile(df$WEALTH,100)
df <- df[df$percentile %in% c(1,5,10,25,50,75,90,95,99), ]

a <- df %>% 
  group_by(percentile) %>% 
  summarise(max = max(INCOME))

我得到的结果与我所做分析的其他部分不一致。 我认为在使用“quantile”函数时,分位数的计算方式与简单地取最大值不同。

我提供了一个可能解释您问题的答案。如果不行,我们可能需要更多细节来理解问题 - 您能否[编辑]您的帖子以指定您的预期输出、实际输出和实际数据(或至少足够的子集以演示问题)?对于数据,在R中运行dput(df)并将结果粘贴到您的问题中。谢谢! - zephryl
2个回答

2

我不确定我是否正确理解了你的问题,但分位数有不同的计算方法。例如,我总是选择第6种方法,因为这是我在统计课程中学到的。

类型:一个介于1和9之间的整数,用于选择以下九种分位数算法之一。

使用?quantile命令(关于分位数的帮助)了解更多不同类型的信息。


0
如果您的数据集行数少于100行,dplyr :: ntile(x,100)将无法产生准确的百分位数,而只会给出编号为总行数的桶:
library(dplyr)

df %>% 
  mutate(percentile = ntile(WEALTH, 100))

# A tibble: 4 × 3
  INCOME WEALTH percentile
   <dbl>  <dbl>      <int>
1   10   100000          1
2   15   111000          2
3   14.2 123456          3
4   12.7 654321          4

要获得真正的百分位数,您可以重新调整结果,手动或使用 scales::rescale()

library(scales)

df %>% 
  mutate(percentile = rescale(
    ntile(WEALTH, 100),
    c(1, 100)
  ))

# A tibble: 4 × 3
  INCOME WEALTH percentile
   <dbl>  <dbl>      <dbl>
1   10   100000          1
2   15   111000         34
3   14.2 123456         67
4   12.7 654321        100

谢谢你的帮助!我非常感激。然而,它似乎产生了与未缩放相同的结果。 - Jakob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接