2016-04-13 119 views
5

我的數據集包含不同物種的多個觀察值。每個物種都有不同數量的觀察結果。在R中尋找一種快速方法來計算每種物種給定變量的前10%值的平均值。如何計算R中前10%的平均值

我想出瞭如何獲得給定數量的值(即前20個值)。

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

我也知道,有修剪的數據集生成其餘數據集的平均值的方式,但我不知道如何修剪只有底部90%。

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

'平均值(X [X> =位數(X,0.9,na.rm = TRUE)],NA。 rm = TRUE)' – eipi10

+0

爲什麼你會比計算第95百分位的數據更喜歡這個意思? – cxrodgers

回答

8

的值的前10%的平均數,使用基R:

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

的值的前10%的平均值,由分組變量:

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

隨着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 

隨着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

是否還有一種方法可以再次獲得特定變量的最低值(最低)10%的值,這又是按物種分組的? – PGLS

+0

是的,只要'x <= quantile(x,0.1)'。您可以使用「分位數」功能在任何百分位範圍內選擇「x」。 – eipi10