我在一个函数中创建数据帧时遇到了一个奇怪的问题。但是,在data.frame之外使用相同的方法可以正常工作!
这是基本功能,我用它来计算数据集的均值,标准差和标准误差:
aggregateX<- function(formula, dataset){
output<-aggregate(formula, dataset, mean) #calculate mean
sdev<-aggregate(formula, dataset, sd) #calculate sd
output$sd<-sdev[length(sdev)] #place sd in same data.frame
output$se<-output$sd/sqrt(max(as.numeric(dataset$P))) #calculate se
names(output$sd)<-"sd";names(output$se)<-"se" #attatch correct names
return(output)
}
该函数有效,但有一种奇怪的方法将data.frame组合为输出。第一个变量(mean)格式正确,但标准偏差和标准误差都被构造为数据帧第一行中的向量。
即。当你在RStudio中查看输出时,它看起来像这样:
这没关系,但是当尝试处理这个不寻常的data.frame时,ggplot2遇到了一些困难。关于如何形成没有奇怪向量的data.frame的任何建议将非常感激。
答案 0 :(得分:1)
这将有效:
aggregateX<- function(formula, dataset){
denom <- sqrt(max(as.numeric(dataset$P)))
aggregate(formula, dataset, function(x){
s <- sd(x)
c(mean=mean(x),sd=s,se=s/denom)
})
}
假设dataset
有一个名为P
的列。
答案 1 :(得分:1)
这可能是:
aggregateX<- function(formula, dataset){
aggregate(formula, dataset, function(x){
c(mean=mean(x),
sdev = sd(x),
# output$sd<-sdev[length(sdev)] #place sd in same data.frame
# that mades no sense.
# the length of a data.frame is the number of columns
se=sd(x)/length(x) #length of a vector makes sense
) }
) }
答案 2 :(得分:0)
我找到的另一个选项,也有效。但是,我相信Ferdinand.kraft提供的解决方案更简单!
与嵌套向量的聚合函数有关。向函数添加[,1]命令似乎可以解决它。见下文。
aggregateX<- function(formula, dataset){
output<-aggregate(formula, dataset, mean)
sdev<-aggregate(formula, dataset, sd)
output$sd<-sdev[length(sdev)][,1]
output$se<-output$sd/sqrt(max(as.numeric(dataset$P)))
# names(output$sd)<-"sd";names(output$se)<-"se" #fix names
return(output)
}