如何计算R中前10%的平均值

时间:2016-04-13 00:18:29

标签: r data.table mean quantile percentile

我的数据集包含针对不同物种的多个观察结果。每个物种的观测数量都不同。寻找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)

1 个答案:

答案 0 :(得分:9)

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

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
相关问题