如何解决如何在计算每组平均值时在ddply中删除第5个和第95个百分位数
我有一个很大的数据集,每个物种都有几个特征值。我想计算每个特征值的平均值,不包括第5个百分点和第95个百分点。我正在使用ddply函数,但无法做到这一点。非常感谢您的帮助。
解决方法
这里是一个函数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],...)
}
通过mutate
分组后,现在species
具有功能的data.frame。
library(dplyr)
df %>%
group_by(species) %>%
mutate(mean = mean2(trait))
测试数据创建代码
set.seed(1234)
species <- sample(LETTERS[1:3],20,TRUE)
trait <- sample(2:8,TRUE)
trait[sample(20,3)] <- sample(50:60,3)
trait[sample(20,1)] <- -2
df <- data.frame(species,trait)
,
具有for
循环:
means = numeric()
for(i in df$Species){
x = df$Trait[which(df$Species==i)]
means[i] = mean(x[which(x<=quantile(x,0.95) & x>=quantile(x,0.05))])
}
}
使用的虚拟数据:
df = data.frame(
Species = sample(rep(LETTERS[1:5],8),40),Trait = rnorm(40,5,3))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。