2016-04-13 23 views
5

Il mio set di dati contiene più osservazioni per specie diverse. Ogni specie ha un diverso numero di osservazioni. Alla ricerca di un modo rapido in R per calcolare la media del 10% superiore dei valori per una data variabile per ogni specie.Come calcolare la media del 10% più alto in R

Ho scoperto come ottenere un determinato numero di valori (vale a dire i primi 20 valori).

clim6 <-setDT(range)[order(species, clim6),.SD[1:20],by=species] 
write.csv(Bioclimlo6, file = "clim6.csv") 

so anche che c'è un modo per tagliare il set di dati per generare una media del set di dati rimanenti, ma non sono sicuro di come tagliare solo la parte inferiore del 90%.

mean(x, trim = 0, na.rm = FALSE) 
+4

'media (x [x> = quantile (x, 0.9, na.rm = TRUE)], na. rm = TRUE) ' – eipi10

+0

Perché preferiresti questo mezzo per calcolare il 95esimo percentile dei dati? – cxrodgers

risposta

8

media del 10% delle valori, utilizzando di base R:

x = c(1:100,NA) 
mean(x[x>=quantile(x, 0.9, na.rm=TRUE)], na.rm=TRUE) 

media del 10% delle valori, da variabile di raggruppamento:

# Fake data 
dat = data.frame(x=1:100, group=rep(LETTERS[1:3], c(30,30,40))) 

Con dplyr

library(dplyr) 

dat %>% group_by(group) %>% 
    summarise(meanTop10pct = mean(x[x>=quantile(x, 0.9)])) 
group meanTop10pct 
    (fctr)  (dbl) 
1  A   29.0 
2  B   59.0 
3  C   98.5 

Con data.table

library(data.table) 

setDT(dat)[, list(meanTop10pct = mean(x[x>=quantile(x, 0.9)])), by=group] 
group meanTop10pct 
1:  A   29.0 
2:  B   59.0 
3:  C   98.5 
+0

C'è anche un modo per ottenere il 10% più basso (più basso) dei valori per una particolare variabile di nuovo raggruppando per specie? – PGLS

+0

Sì, basta 'x <= quantile (x, 0.1)'. Puoi scegliere 'x' all'interno di qualsiasi intervallo di percentili usando la funzione' quantile'. – eipi10

Problemi correlati