这是我到目前为止所拥有的。出于速度目的,我想在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
答案 0 :(得分:1)
根据预期结果,您似乎想要计算与 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
类似的累积分位数。这可以使用cumsum()
包完成:
cumstats