首页 > 解决方案 > 如何在计算每个组的平均值时删除 ddply 中的第 5 个和第 95 个百分位值

问题描述

我有一个大型数据集,每个物种都有几个特征值。我想计算每个值的特征平均值,不包括第 5 个百分位数和第 95 个百分位数。我正在使用 ddply 功能,但无法做到这一点。非常感谢任何帮助。

块引用

标签: rdplyroutliersquantile

解决方案


这是一个mean2计算修剪均值的函数。

mean2 <- function(x, na.rm = FALSE, probs = c(0.05, 0.95), ...){
  if(na.rm) x <- x[!is.na(x)]
  qq <- quantile(x, probs = probs)
  keep <- x > qq[1] & x < qq[2]
  mean(x[keep], ...)
}

现在mutatedata.frame 与分组后的功能species

library(dplyr)

df %>%
  group_by(species) %>%
  mutate(mean = mean2(trait))

测试数据创建代码

set.seed(1234)
species <- sample(LETTERS[1:3], 20, TRUE)
trait <- sample(2:8, 20, TRUE)
trait[sample(20, 3)] <- sample(50:60, 3)
trait[sample(20, 1)] <- -2
df <- data.frame(species, trait)

推荐阅读