聚合打印列,但不将其保存到全局环境

aggregate prints column, but does not save it to global environment

我在这里有点困惑,找不到好的答案。

我有一个要聚合的数据框:

dt <- data.frame(age=rchisq(20,10),group=sample(1:2,20,rep=T))

当我聚合此数据框并将其保存到新数据框时,它仅将 2 个观察值和 2 个变量保存到全局环境:

ag<-aggregate(age ~ group, dt, function(x) c(mean = mean(x), sd = sd(x)))
    
    group   age
1   1   9.119008
2   2   9.740361

即分组和年龄列。当我直接在控制台中执行此操作时,它会按预期打印三列,即组 age.mean 和 age.sd:

aggregate(age ~ group, dt, function(x) c(mean = mean(x), sd = sd(x)))

  group age.mean   age.sd
1     1 9.119008 3.611732
2     2 9.740361 4.163281

即使在使用 ag 将全局环境数据帧打印到控制台时,它也会打印所有三列。为什么第三列没有出现在全局环境中?我怎样才能到达那里?

它在我的控制台上工作得很好:

    > dt <- data.frame(age=rchisq(20,10),group=sample(1:2,20,rep=T))
> ag<-aggregate(age ~ group, dt, function(x) c(mean = mean(x), sd = sd(x)))
> ag
  group  age.mean    age.sd
1     1 11.176997  4.439366
2     2 11.374782  4.416337
> aggregate(age ~ group, dt, function(x) c(mean = mean(x), sd = sd(x)))
  group  age.mean    age.sd
1     1 11.176997  4.439366
2     2 11.374782  4.416337

您的问题是 aggregate 导致矩阵列,例如应用多个 FUN= 操作时。您需要另外包装一个 data.frame 方法,仅此而已。

ag1 <- aggregate(age ~ group, dt, function(x) c(mean=mean(x), sd=sd(x)))
str(ag1)
# 'data.frame': 2 obs. of  2 variables:
#  $ group: int  1 2
#  $ age  : num [1:2, 1:2] 9.06 11 3.28 4.8
#   ..- attr(*, "dimnames")=List of 2
#   .. ..$ : NULL
#   .. ..$ : chr [1:2] "mean" "sd"

制作数据框:

res <- do.call(data.frame, ag1)
res
#   group  age.mean   age.sd
# 1     1  9.061935 3.283173
# 2     2 10.998478 4.798354

str(res)
# 'data.frame': 2 obs. of  3 variables:
#  $ group   : int  1 2
#  $ age.mean: num  9.06 11
#  $ age.sd  : num  3.28 4.8

一应俱全:

res <- do.call(data.frame, aggregate(age ~ group, dt, function(x)
  c(mean=mean(x), sd=sd(x)))

数据:

dt <- data.frame(age=rchisq(20,10),group=sample(1:2,20,rep=T))

由于评分低,我不能在这里发表评论,所以我 post 我的评论作为答案。

除了jay.sf的回答外,在this post中有对aggregate这种行为的详细解释。