如何访问聚合数据帧r的不同聚合列

时间:2017-08-16 14:13:37

标签: r aggregate

我有

> 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

我想将该函数用于另一个函数,但不知道如何访问它。 我不能用$ x.Mean调用列,因为只有2列

> dim(a)
[1] 2 2
> colnames(a)
[1] "Group.1" "x"  

我不想保存然后读取它,因为实际的df非常大。

任何人都可以指导我如何访问聚合表的不同列。作为额外的,也可以重命名每个计算字段

2 个答案:

答案 0 :(得分:0)

答案在这里:R: results from aggregate with multiple functions not usable in further calculations. WHY?

一旦我聚合,我转换为列表,然后转换为data.frame

> as.data.frame(as.list(a))
  Group.1 x.Min. x.1st.Qu. x.Median x.Mean x.3rd.Qu. x.Max. x.V7      x.V8
1       a  29.76     30.17    30.56  30.38     30.60  30.83    5 0.4244106
2       b  27.54     28.79    29.48  29.27     29.97  30.60    4 1.2884043
> dim(as.data.frame(as.list(a)))
[1] 2 9
> 

答案 1 :(得分:0)

您可以x.Mean访问a$x[,4]列。如果要更改用于names(a) <- c("Name", "Value")的列的名称。如果您要更改x.Mean, x.Min,...名称,请使用colnames(a$x) <- c("Min", "FQ",...),或者如果您只想更改一列,请使用colnames(a$x)[1] <- "Min"。请注意,由于我将x名称更改为“值”,因此您还需要将colnames(a$x)更改为colnames(a$Value)