【发布时间】:2016-08-22 16:11:19
【问题描述】:
我的数据看起来像这样:
id <- c(1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,8,8,8,9,9,9)
yr <- c(1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3)
gr <- c(3,4,5,3,4,5,3,4,5,4,5,6,4,5,6,4,5,6,5,6,7,5,6,7,5,6,7)
x <- c(33,48,31,41,31,36,25,38,28,17,39,53,60,60,19,39,34,47,20,28,38,15,17,49,48,45,39)
df <- data.frame(id,yr,gr,x)
id yr gr x
1 1 1 3 33
2 1 2 4 48
3 1 3 5 31
4 2 1 3 41
5 2 2 4 31
6 2 3 5 36
7 3 1 3 25
8 3 2 4 38
9 3 3 5 28
10 4 1 4 17
11 4 2 5 39
12 4 3 6 53
13 5 1 4 60
14 5 2 5 60
15 5 3 6 19
16 6 1 4 39
17 6 2 5 34
18 6 3 6 47
19 7 1 5 20
20 7 2 6 28
21 7 3 7 38
22 8 1 5 15
23 8 2 6 17
24 8 3 7 49
25 9 1 5 48
26 9 2 6 45
27 9 3 7 39
我想在数据框中创建一个新变量,其中包含在“yr”和“gr”的每个唯一组合中计算的“x”分位数。也就是说,我不想根据示例中的所有 27 行数据找到“x”的分位数,而是通过两个分组变量来计算分位数:yr 和 gr。例如,yr = 1 且 gr = 3、yr = 1 且 gr = 4 时“x”的分位数等
计算完这些值后,我希望将它们作为单列附加到数据框中,例如“x_quant”。
我能够将数据分成我需要的单独组,并且我知道如何计算分位数,但是我无法以适合在现有数据中创建新列的方式组合这两个步骤框架。
你们能提供的任何帮助将不胜感激!非常感谢!
~kj
【问题讨论】:
-
分位数是指百分位数吗?如果是这样,
dplyr让它变得非常简单:library(dplyr) ; df %>% group_by(yr, gr) %>% mutate(percentile = percent_rank(x) * 100)