我有点困惑,找不到一个好的答案。
我有一个数据框,我试图聚合:
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
即列group和age。当我直接在控制台中执行此操作时,它打印三列,即组年龄。平均值和年龄。
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将全局环境数据框打印到控制台时,它也会打印所有三列。为什么第三列没有显示在全局环境中?我怎样才能到那里呢?
您的问题是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
All in one:
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))
在我的主机上运行良好:
> 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
我不能在这里评论,因为评分很低,所以我把我的评论作为回答。
除了jay。作为回答,在这篇文章中有aggregate
的这种行为的详细解释。