R:按组的四分位数保存为新变量

时间:2018-06-07 08:47:53

标签: r quartile

我有一些看起来像这样的数据:

 id yearborn male educ
 1     1960    1    3
 1     1960    1    3
 1     1960    1    3
 2     1960    1    2
 2     1960    1    2
 2     1960    1    2
 3     1960    1    1
 3     1960    1    1
 3     1960    1    1
 4     1960    0    1
 4     1960    0    1
 4     1960    0    1
 5     1960    0    2
 5     1960    0    2
 5     1960    0    2
 6     1960    0    3
 6     1960    0    3
 6     1960    0    3
 7     1960    0    2
 7     1960    0    2
 7     1960    0    2
 8     1960    1    3
 8     1960    1    3
 8     1960    1    3
 9     1961    1    2
 9     1961    1    2
 9     1961    1    2
10     1961    1    1
10     1961    1    1
10     1961    1    1
11     1961    1    1
11     1961    1    1
11     1961    1    1
12     1961    0    2
12     1961    0    2
12     1961    0    2
13     1961    0    3
13     1961    0    3
13     1961    0    3
14     1961    0    2
14     1961    0    2
14     1961    0    2  
15     1961    0    1
15     1961    0    1
15     1961    0    1
16     1961    1    3
16     1961    1    3
16     1961    1    3

我想在数据框中创建一个新变量,其中包含每个人的出生年份和性别的教育分位数(通过对每年和年龄的个体进行排序来定义教育四分位数)。也就是说,我不想根据示例中的所有数据行找到“educ”的分位数,而是想通过两个分组变量计算分位数:分娩变量和男性变量。例如,当年初= 1960年和男性= 1时,“educ”的分位数。

一旦计算出这些值,我希望它们作为单个列附加到数据框中,比如说“educ_quant”应该等于:第一个四分位数,第二个四分位数,第三个四分位数,第四个四分位数。 / p>

我知道如何计算分位数和分组数据,但我遇到的问题是能够在现有数据框中创建新列。

我尝试过类似的东西,但这并不是我需要的东西:

library(dplyr)
df %>% group_by(id, yearborn, male) %>% mutate(percentile = percent_rank(educ) * 100)

library(data.table)
setDT(df)[,quantile := cut(educ, quantile(educ, probs = 0:4/4, na.rm=TRUE),
                       labels = FALSE, include.lowest = TRUE), by = c(id, yearborn, male)]

对于后者,我的问题是休息时间是非唯一的。

它应该最终看起来像这样(出生年份1960年):

id yearborn male educ   educ_quant
 1     1960    1    3        4th
 1     1960    1    3        4th
 1     1960    1    3        4th
 2     1960    1    2        2nd
 2     1960    1    2        2nd
 2     1960    1    2        2nd
 3     1960    1    1        1st
 3     1960    1    1        1st
 3     1960    1    1        1st
 4     1960    0    1        1st
 4     1960    0    1        1st
 4     1960    0    1        1st
 5     1960    0    2        3rd
 5     1960    0    2        3rd
 5     1960    0    2        3rd
 6     1960    0    3        4th
 6     1960    0    3        4th
 6     1960    0    3        4th
 7     1960    0    2        2nd
 7     1960    0    2        2nd
 7     1960    0    2        2nd
 8     1960    1    3        3rd
 8     1960    1    3        3rd
 8     1960    1    3        3rd

每年应该有个人随机排序*年龄水平,应该定义四个教育四分位数。

一篇文章用这种方式描述:“因此,为了比较不同时期的类似人群,我们在出生年份内定义了”教育四分位数“ - 也就是说,将”最高技能“的四分之一组合在一起我们在一年中出生的人口,等等。我们分别为男性和女性定义这些四分位数,以便在男女教育机会方面存在时间差异。

0 个答案:

没有答案