2016-04-13 22 views
5

Mein Datensatz enthält mehrere Beobachtungen für verschiedene Arten. Jede Spezies hat eine andere Anzahl von Beobachtungen. Suche nach einem schnellen Weg in R, um den Mittelwert der oberen 10% der Werte für eine gegebene Variable für jede Art zu berechnen.Wie berechnet man den Mittelwert der oberen 10% in R

Ich habe herausgefunden, wie man eine bestimmte Anzahl von Werten (d. H. Die oberen 20 Werte) erhalten.

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

Ich weiß auch, dass es einen Weg gibt, den Datensatz zu trimmen einen Mittelwert der verbleibenden Datenmenge zu erzeugen, aber ich bin nicht sicher, wie nur die untere 90% zu trimmen.

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

'Mittelwert (x [x> = Quantil (x, 0,9, na.rm = TRUE)], na. rm = TRUE) ' – eipi10

+0

Warum bevorzugen Sie diesen Mittelwert bei der Berechnung des 95. Perzentils der Daten? – cxrodgers

Antwort

8

Mittelwert der oberen 10% der Werte, base R unter Verwendung von:

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

Mittelwert der oberen 10% der Werte, die von Gruppenvariablen:

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

Mit 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 

Mit 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

Gibt es zusätzlich eine Möglichkeit, die unteren (niedrigsten) 10% der Werte für eine bestimmte Variable wieder nach Arten zu gruppieren? – PGLS

+0

Ja, mach einfach 'x <= Quantil (x, 0.1)'. Sie können innerhalb der Perzentilbereiche mit der Funktion 'quantile'' x' wählen. – eipi10

Verwandte Themen