对聚合函数的结果进行分析

时间:2014-07-26 23:14:18

标签: r aggregate

  temp <- aggregate( .~ groupbycolumn, data = df[numCols],FUN=function(x) c(MED =median(x), SD=sd(x)))

我在数据帧df上使用了聚合函数来计算数据帧中某些列的中值和sd。

我想使用median和sd列进行进一步分析。

当我尝试:

temp$med

我得到结果为NULL。有没有解决这个问题?我想使用median和sd列进行进一步分析

1 个答案:

答案 0 :(得分:0)

我认为您不能在$上使用aggregate,因为在您的示例中,结果是按分组列提供的。由于您正在应用两个函数,因此您需要像使用矩阵一样使用列索引。这是一个例子

> myfuns <- function(x) c(MED = median(x), SD = sd(x))
> ( ag <- aggregate(. ~ cyl, data = mtcars[1:3], FUN = myfuns) )
#   cyl   mpg.MED    mpg.SD  disp.MED   disp.SD
# 1   4 26.000000  4.509828 108.00000  26.87159
# 2   6 19.700000  1.453567 167.60000  41.56246
# 3   8 15.200000  2.560048 350.50000  67.77132

在这里,我只查询一个索引值,但在结果中得到两列。这是由于myfuns结果。它是长度为2的命名向量。正确的名称现在显示,但您仍然无法使用$运算符,因为它不会对矩阵进行操作。

> ag[,2]
#       MED       SD
# [1,] 26.0 4.509828
# [2,] 19.7 1.453567
# [3,] 15.2 2.560048

我看到了您对summaryBy的评论,是的,它确实返回了一个命名列表,因此可以使用$进行子集化

> ( sb <- summaryBy(. ~ cyl, data = mtcars[1:3], FUN = myfuns) )
#   cyl mpg.MED   mpg.SD disp.MED  disp.SD
# 1   4    26.0 4.509828    108.0 26.87159
# 2   6    19.7 1.453567    167.6 41.56246
# 3   8    15.2 2.560048    350.5 67.77132
> sb$mpg.MED
# [1] 26.0 19.7 15.2
> as.list(sb)
# $cyl
# [1] 4 6 8
#
# $mpg.MED
# [1] 26.0 19.7 15.2
# 
# $mpg.SD
# [1] 4.509828 1.453567 2.560048
#
# $disp.MED
# [1] 108.0 167.6 350.5
#  
# $disp.SD
# [1] 26.87159 41.56246 67.77132