R:如何根据另一列分组的数据帧中的前一行创建第90个分位数的新列?

时间:2017-03-17 03:30:42

标签: r data.table dplyr quantile

这是我到目前为止所拥有的。出于速度目的,我想在dplyr或data.table中使用它。

test <- data.table(a = c(1,2,3,4,5,6), 
                   b = c("a", "b", "c", "a", "b", "c") , 
                   c = c(1,7,11,4,5,5))

   a b  c 
1: 1 a  1 
2: 2 b  7 
3: 3 c 11 
4: 4 a  4 
5: 5 b  5 
6: 6 c  5 

test[, a90 := lapply(.I, function(x) quantile(a[0:x], 0.9, na.rm = TRUE)), by = b]

test

这就是我得到的:

   a b  c a90
1: 1 a  1 1.0
2: 2 b  7 4.7
3: 3 c 11 5.7
4: 4 a  4 1.0
5: 5 b  5 4.7
6: 6 c  5 5.7

我不知道怎么回事。  我希望这个实际上按b和每组的第90个分位数分组:

   a b  c a90
1: 1 a  1 1.0
2: 2 b  7 2.0
3: 3 c 11 3.0
4: 4 a  4 3.7
5: 5 b  5 4.7
6: 6 c  5 5.7

1 个答案:

答案 0 :(得分:1)

根据预期结果,您似乎想要计算与 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>类似的累积分位数。这可以使用cumsum()包完成:

cumstats