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列进行进一步分析
答案 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