Chr*_*lla 7 variables excel grouping r
我正在尝试计算按流域分组的多个水质值的第95百分位数.例如...
Watershed WQ
50500101 62.370661
50500101 65.505046
50500101 58.741477
50500105 71.220034
50500105 57.917249
Run Code Online (Sandbox Code Playgroud)
我回顾了这个问题 - 每个观察的Percentile w/r/t分组变量.它看起来非常接近我想做的事情,但它适用于每次观察.我需要为每个分组变量.理想情况下,
Watershed WQ - 95th
50500101 x
50500105 y
Run Code Online (Sandbox Code Playgroud)
谢谢
这可以使用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))
Run Code Online (Sandbox Code Playgroud)
和结果
Watershed WQ95
1 a 1.353993
2 b 1.461711
Run Code Online (Sandbox Code Playgroud)
结合使用 tapply 和 quantile 函数。例如,如果您的数据集如下所示:
DF <- data.frame('watershed'=sample(c('a','b','c','d'), 1000, replace=T), wq=rnorm(1000))
Run Code Online (Sandbox Code Playgroud)
用这个:
with(DF, tapply(wq, watershed, quantile, probs=0.95))
Run Code Online (Sandbox Code Playgroud)
我希望我能正确理解你的问题.这是你在找什么?
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
Run Code Online (Sandbox Code Playgroud)
编辑
根据文森特的回答,
aggregate(my.df$var, by = list(my.df$group), FUN = quantile, probs = 0.95)
Run Code Online (Sandbox Code Playgroud)
也工作(你可以1001种方式给猫皮肤 - 我被告知).旁注,您可以指定所需数量的向量,例如c(0.1, 0.2, 0.3...)十分位数.或者您可以尝试summary使用某些预定义统计信息.
aggregate(my.df$var, by = list(my.df$group), FUN = summary)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24772 次 |
| 最近记录: |