2017-09-17 50 views
1

我想创建一个称为百分数的变量,每组的某些值的四分位数。我有以下的数据集,我想创建的最后一个变量percentile计算每组某些值的四分位数

id group value 
1 1  1  1 
2 2  1  2 
3 3  1  3 
4 4  1  4 
5 5  2 10 
6 6  2 20 
7 7  2 30 
8 8  2 40 

以下是预期的结果。

id group value percentile 
1 1  1  1 
2 1  2  2 
3 1  3  3 
4 1  4  4 
5 2  10 1 
6 2  20 2 
7 2  30 3 
8 2  40 4 

到目前为止,我已经尝试使用该库dplyr如下:

df <- df %>% group_by(group) %>% within(df, percentile <- as.integer(cut(value, quantile(value, probs=0:4/4), 
                   include.lowest=TRUE))) 

但它似乎并没有工作。它不会产生任何变量称为百分也不给我一个错误

+1

我想知道你是否想过使用'mutate()'。 – jazzurro

回答

1

这是你需要什么?:

> df$percentile = ave(df$value, df$group, FUN=function(x) ecdf(x)(x)) 

重:如果你想的到4,你可以:

df$percentile = factor(df$percentile) 
levels(df$percentile) <- 1:4 
+0

足够接近,但创建一个变量四分位数代表四分位数每个观察,id在这种情况下 –

+0

也许这是更容易反向工作,这个例子中的答案是什么,@AndresAzqueta – erasmortg

+0

是真的,我刚刚更新了问题。我已经意识到这是写得很糟 –