4
我编写了一个函数(weighted.sd),它给出了一些加权统计信息(如均值,标准差,标准误差和95%置信区间)。我想对因子变量(区域)的每个级别应用此函数,然后使用ggplot2图中带误差条的每个区域的加权统计量(因此为95%置信区间)。如何在dplyr中使用group_by()和do()为每个因子级别应用函数
我也尝试了tapply和a 。-loop但我仍然不会正确此外,我喜欢用dplyr像我可以,因为它很容易阅读和理解
这是我最好的尝试:。
#example data
data<-as.data.frame(cbind(rnorm(1:50),as.factor(rnorm(1:50)),rnorm(1:50)))
colnames(data)<-c("index_var","factor_var","weight_var")
weighted.sd <- function(x,weight){
na <- is.na(x) | is.na(weight)
x <- x[!na]
weight <- weight[!na]
sum.w <- sum(weight)
sum.w2 <- sum(weight^2)
mean.w <- sum(x * weight)/sum(weight)
x.var.w<- (sum.w/(sum.w^2 - sum.w2)) * sum(weight * (x - mean.w)^2)
x.sd.w<-sqrt((sum.w/(sum.w^2 - sum.w2)) * sum(weight * (x - mean.w)^2))
SE<- x.sd.w/sqrt(sum(weight))
error <- qnorm(0.975)*x.sd.w/sqrt(sum(weight))
left <- mean.w-error
right <- mean.w+error
return(cbind(mean.w,x.sd.w,SE,error,left,right))
}
test<- data %>%
group_by(factor_var) %>%
do(as.data.frame(weighted.sd(x=index_var,weight=weight_var)))
test
这会导致一条错误消息(对不起,其中一部分是德语,但您可以使用该代码进行复制):
Error in as.data.frame(weighted.sd(x = index_var, weight = weight_var)) :
Fehler bei der Auswertung des Argumentes 'x' bei der Methodenauswahl
für Funktion 'as.data.frame': Error in weighted.sd(x = index_var, weight = weight_var) :
object 'index_var' not found
非常感谢!我不知道这一点,它与我的真实数据一起工作(没有负面的权重)。 – SEMson
不客气,很高兴我能帮忙:) – LyzandeR