我正在尝试计算按分水岭分组的多个水质值的第95百分位数。例如......
Watershed WQ
50500101 62.370661
50500101 65.505046
50500101 58.741477
50500105 71.220034
50500105 57.917249
我回顾了这个问题 - 每个观察的百分位w / r / t分组变量。它看起来非常接近我想做的事情,但它适用于每次观察。我需要为每个分组变量。理想情况下,
Watershed WQ - 95th
50500101 x
50500105 y
感谢
答案 0 :(得分:7)
这可以使用plyr
库来实现。我们指定分组变量Watershed
并要求WQ的95%分位数。
library(plyr)
#Random seed
set.seed(42)
#Sample data
dat <- data.frame(Watershed = sample(letters[1:2], 100, TRUE), WQ = rnorm(100))
#plyr call
ddply(dat, "Watershed", summarise, WQ95 = quantile(WQ, .95))
和结果
Watershed WQ95
1 a 1.353993
2 b 1.461711
答案 1 :(得分:5)
我希望我能正确理解你的问题。这是你在找什么?
my.df <- data.frame(group = gl(3, 5), var = runif(15))
aggregate(my.df$var, by = list(my.df$group), FUN = function(x) quantile(x, probs = 0.95))
Group.1 x
1 1 0.6913747
2 2 0.8067847
3 3 0.9643744
修改的
根据文森特的回答,
aggregate(my.df$var, by = list(my.df$group), FUN = quantile, probs = 0.95)
也有效(你可以用1001种方式涂抹猫 - 我被告知)。旁注,您可以指定所需-iles的向量,例如c(0.1, 0.2, 0.3...)
表示十进制。或者,您可以尝试使用函数summary
来获取某些预定义的统计信息。
aggregate(my.df$var, by = list(my.df$group), FUN = summary)
答案 2 :(得分:4)
使用tapply和quantile函数的组合。例如,如果您的数据集如下所示:
DF <- data.frame('watershed'=sample(c('a','b','c','d'), 1000, replace=T), wq=rnorm(1000))
使用此:
with(DF, tapply(wq, watershed, quantile, probs=0.95))
答案 3 :(得分:3)
在Excel中,您将需要使用数组公式来简化这一过程。我建议如下:
{=PERCENTILE(IF($A2:$A6 = Watershed ID, $B$2:$B$6), 0.95)}
A列是Watershed ID,B列是WQ值。
另外,请务必输入公式作为数组公式。输入公式时按Ctrl + Shift + Enter可以这样做。
答案 4 :(得分:0)
使用data.table - 包,您可以这样做:
export type TableProps<T> = {
contents: T[],
loadContents: () => Promise<T[]>,
[key: string]: any
};