簡體   English   中英

R:如何根據另一列分組的數據幀中的前幾行為第90個分位數創建新列?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM