在某些条件下,R生成包含矩阵作为元素的数据帧。这需要一定的决心才能手动完成,但是例如aggregate()
调用的结果,聚合函数返回多个值:
set.seed(101)
d0 <- data.frame(g=factor(rep(1:2,each=20)), x=rnorm(20))
d1 <- aggregate(x~g, data=d0, FUN=function(x) c(m=mean(x), s=sd(x)))
str(d1)
## 'data.frame': 2 obs. of 2 variables:
## $ g: Factor w/ 2 levels "1","2": 1 2
## $ x: num [1:2, 1:2] -0.0973 -0.0973 0.8668 0.8668
## ..- attr(*, "dimnames")=List of 2
## .. ..$ : NULL
## .. ..$ : chr "m" "s"
从某种意义上讲,但可能给下游处理代码带来麻烦(例如,ggplot2
不喜欢)。如果您不知道要查看的内容,打印的表示形式也可能会造成混淆:
d1
## g x.m x.s
## 1 1 -0.09731741 0.86678436
## 2 2 -0.09731741 0.86678436
我正在寻找一种相对简单的方法来将此对象折叠为常规的三列数据框(名称为g
,m
,s
,或的名称为g
,x.m
,x.s
...)。
我知道tidyverse(group_by
+ summarise
不会出现此问题,但是我正在寻找base-R解决方案。