Как рассчитать среднее значение 10% лучших в R

Мой набор данных содержит несколько наблюдений для разных видов. У каждого вида разное количество наблюдений. Ищем быстрый способ в 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)

person PGLS    schedule 13.04.2016    source источник
comment
Почему вы предпочли бы это среднее значение вычислению 95-го процентиля данных?   -  person cxrodgers    schedule 13.04.2016


Ответы (1)


Среднее 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
person eipi10    schedule 13.04.2016
comment
Есть ли дополнительный способ получить нижние (самые низкие) 10% значений для конкретной переменной, снова сгруппированные по видам? - person PGLS; 14.04.2016
comment
Да вобще x <= quantile(x, 0.1). Вы можете выбрать x в пределах любого процентиля, используя функцию quantile. - person eipi10; 14.04.2016