PGL*_*GLS 6 r mean percentile quantile data.table
我的数据集包含不同物种的多个观测值.每个物种的观测数量都不同.寻找R中的快速方法来计算每个物种的给定变量的前10%值的平均值.
我想出了如何获得给定数量的值(即前20个值).
clim6 <-setDT(range)[order(species, clim6),.SD[1:20],by=species]
write.csv(Bioclimlo6, file = "clim6.csv")
Run Code Online (Sandbox Code Playgroud)
我也知道有一种方法可以修剪数据集以生成剩余数据集的平均值,但我不确定如何仅修剪底部的90%.
mean(x, trim = 0, na.rm = FALSE)
Run Code Online (Sandbox Code Playgroud)
使用基数R的前10%值的平均值:
x = c(1:100,NA)
mean(x[x>=quantile(x, 0.9, na.rm=TRUE)], na.rm=TRUE)
Run Code Online (Sandbox Code Playgroud)
通过对变量进行分组,值的前10%的平均值:
# Fake data
dat = data.frame(x=1:100, group=rep(LETTERS[1:3], c(30,30,40)))
Run Code Online (Sandbox Code Playgroud)
同 dplyr
library(dplyr)
dat %>% group_by(group) %>%
summarise(meanTop10pct = mean(x[x>=quantile(x, 0.9)]))
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)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]
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)group meanTop10pct 1: A 29.0 2: B 59.0 3: C 98.5