![](/img/trans.png)
[英]R: How to create a new column for 90th quantile based off previous rows in a data frame grouped by another column?
[英]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.