come calcolare il 95 ° percentile di valori con variables di raggruppamento in R o Excel

Sto cercando di calcolare il 95 ° percentile per più valori di qualità dell'acqua raggruppati per spartiacque. per esempio…

Watershed WQ 50500101 62.370661 50500101 65.505046 50500101 58.741477 50500105 71.220034 50500105 57.917249 

ho esaminato questa domanda postata – Percentuale per each osservazione w / r / t Variabile di raggruppamento. sembra molto vicino a quello che voglio fare, ma è per each osservazione. ne ho bisogno per each variabile di raggruppamento. in modo ideale,

 Watershed WQ - 95th 50500101 x 50500105 y 

Grazie

Questo può essere ottenuto utilizzando la libreria plyr . Specificare la variabile di raggruppamento Watershed e chiedere il quantile del 95% di WQ.

 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)) 

ei risultati

  Watershed WQ95 1 a 1.353993 2 b 1.461711 

Spero di capire correttamente la tua domanda. È questo quello che stai cercando?

 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 

EDIT

Sulla base della risposta di Vincent,

 aggregate(my.df$var, by = list(my.df$group), FUN = quantile, probs = 0.95) 

funziona anche (si può pelle un gatto 1001 modi – mi è stato detto). Una nota laterale, è ansible specificare un vector dei desideri -iles, ad esempio c(0.1, 0.2, 0.3...) per decile. Oppure puoi provare la summary funzioni per alcune statistiche predefinite.

 aggregate(my.df$var, by = list(my.df$group), FUN = summary) 

Utilizzare una combinazione delle funzioni di tapply e quantile. Ad esempio, se il tuo set di dati è simile:

 DF <- data.frame('watershed'=sample(c('a','b','c','d'), 1000, replace=T), wq=rnorm(1000)) 

Usa questo:

 with(DF, tapply(wq, watershed, quantile, probs=0.95)) 

In Excel, si desidera utilizzare una formula di matrix per rendere questo facile. Suggerisco quanto segue:

 {=PERCENTILE(IF($A2:$A6 = Watershed ID, $B$2:$B$6), 0.95)} 

La colonna A sarebbe l'ID del bacino idrografico e la colonna B sarebbe i valori WQ.

Inoltre, assicuratevi di inserire la formula come una formula di matrix. Fallo premendo Ctrl + Maiusc + Invio quando si inserisce la formula.

Sulla base della risposta di Chase, ecco una soluzione che utilizza il pacchetto dplyr . Naturalmente una questione di preferenza per quanto riguarda la soluzione e mi piace la relativa chiarezza (per me) del metodo "piping" ( %>% ) utilizzato in dplyr :

 library(dplyr) #Random seed set.seed(42) #Sample data dat <- data.frame(Watershed = sample(letters[1:2], 100, TRUE), WQ = rnorm(100)) #dplyr call dat %>% group_by(Watershed) %>% summarise(WQ95 = quantile(slc, 0.95))