【发布时间】:2017-08-16 14:13:36
【问题描述】:
我有
> df=data.frame(name=c(rep('a',5),rep('b',4)),Value=rnorm(9,30,1))
> a=aggregate(df$Value,list(df$name),function(x)c(summary(x),length(x),sd(x)))
> df
name Value
1 a 30.83432
2 a 30.59692
3 a 30.16761
4 a 29.75632
5 a 30.56168
6 b 27.54306
7 b 29.20575
8 b 30.59607
9 b 29.75491
> a
Group.1 x.Min. x.1st Qu. x.Median x.Mean x.3rd Qu. x.Max. x.V7 x.V8
1 a 29.7600000 30.1700000 30.5600000 30.3800000 30.6000000 30.8300000 5.0000000 0.4244106
2 b 27.5400000 28.7900000 29.4800000 29.2700000 29.9700000 30.6000000 4.0000000 1.2884043
我想将平均值用于另一个函数,但不知道如何访问它。 我不能用 a$x.Mean 调用该列,因为 a 只有 2 列
> dim(a)
[1] 2 2
> colnames(a)
[1] "Group.1" "x"
我不想保存再读入,因为实际的df非常大。
谁能指导我如何访问聚合表的不同列。另外,是否也可以重命名每个计算字段
【问题讨论】:
-
a$x[,"Mean"]给你你想要的。a$x是一个矩阵,您需要参考相应的列。等一下,聚合的结果,其中多个函数在进一步计算中不可用。谁说的? -
我会将它包装在一个函数中,在其中设置所需的名称,例如
f = function(x) c(as.list(summary(x)), list(n = length(x), sd = sd(x))); library(data.table); setDT(df)[, f(Value), by=name]。如果出于某种原因你喜欢x.*前缀,那么setDT(df)[, c(x = f(Value)), by=name]