![](/img/trans.png)
[英]R: How to create a new column for 90th quantile based off previous rows in a data frame
[英]R: How to create a new column for 90th quantile based off previous rows in a data frame grouped by another column?
到目前為止,這就是我所擁有的。 我希望在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
從預期結果來看,您似乎想要計算與cumsum()
類似的累積分位數 。 可以使用cumstats
包完成此cumstats
:
test[, a90 := cumstats::cumquant(a, .9), by = b][]
# 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.