【问题标题】:how to access different aggregated columns of aggregated data frame r如何访问聚合数据框r的不同聚合列
【发布时间】: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]

标签: r aggregate


【解决方案1】:

答案在这里: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
> 

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2016-03-02
      • 1970-01-01
      • 2016-05-18
      • 1970-01-01
      • 2016-01-13
      • 1970-01-01
      • 1970-01-01
      • 2021-06-16
      • 2020-01-20
      相关资源
      最近更新 更多