2

我在函数中创建数据框时遇到了一个奇怪的问题。但是,在 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 组合为输出的奇怪方法。第一个变量(平均值)的格式正确,但标准偏差和标准误差都被构造为数据帧第一行中的向量。

即,当您在 RStudio 中查看输出时,它看起来像这样: 在此处输入图像描述

这无关紧要,但是 ggplot2 在尝试处理这个不寻常的 data.frame 时遇到了一些困难。任何关于如何在没有奇怪向量的情况下形成 data.frame 的建议将不胜感激。

4

3 回答 3

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.

于 2013-09-29T16:17:31.287 回答
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
                   )                               }
        )                     }
于 2013-09-29T16:31:12.710 回答
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)
}
于 2013-09-30T13:01:42.167 回答