如何解决聚合打印列,但不将其保存到全局环境
我在这里有点困惑,找不到好的答案。
我有一个要聚合的数据框:
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.mean 和 age.sd:
aggregate(age ~ group,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,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,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,function(x)
c(mean=mean(x),sd=sd(x)))
数据:
dt <- data.frame(age=rchisq(20,rep=T))
,
我无法在这里发表评论,因为评分低,所以我发表评论作为答案。
除了 jay.sf 的回答,在 this post 中有对 aggregate
的这种行为的详细解释。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。