簡體   English   中英

R:如何根據數據框中的前幾行為第90個分位數創建新列

[英]R: How to create a new column for 90th quantile based off previous rows in a data frame

data.frame(c = c(1,7,11,4,5,5))

   c
1  1
2  7
3 11
4  4
5  5
6  5

所需的數據框

   c c.90th
1  1   NA
2  7   1
3 11   6.4
4  4   10.2
5  5   9.8
6  5   9.4

對於第一行,我希望它查看前幾行,而不是第90行,即NA。 對於第二行,我希望它查看前面的行1並獲得第90個分位數。對於第三行,我希望它查看前面的行1、7並得到第90個分位數6.4。 等等

使用data.table的解決方案也可以按組工作:

library(data.table)

dt <- data.table(c = c(1,7,11,4,5,5),
                 group = c(1, 1, 1, 2, 2, 2))

cumquantile <- function(y, prob) {
    sapply(seq_along(y), function(x) quantile(y[0:(x - 1)], prob))
}

dt[, c90 := cumquantile(c, 0.9)]
dt[, c90_by_group := cumquantile(c, 0.9), by = group]

> dt
    c group  c90 c90_by_group
1:  1     1   NA           NA
2:  7     1  1.0          1.0
3: 11     1  6.4          6.4
4:  4     2 10.2           NA
5:  5     2  9.8          4.0
6:  5     2  9.4          4.9

嘗試:

dff <- data.frame(c = c(1,7,11,4,5,5))

dff$c.90th <- sapply(1:nrow(dff),function(x) quantile(dff$c[0:(x-1)],0.9,names=F))

輸出:

 c  c.90th
  1   NA  
  7  1.0  
 11  6.4  
  4 10.2  
  5  9.8  
  5  9.4 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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