R-聚合在存储后创建奇怪大小的数据集

R-聚合在存储后创建奇怪大小的数据集,r,aggregate,R,Aggregate,当我尝试使用以下数据的聚合进行统计时-例如- 存储了奇怪的输出大小 group O18 D 1 st1 -6.89 -53.52709 2 st1 -7.16 -56.75802 3 st1 -7.17 -54.79471 4 st2 -7.09 -54.98376 5 st2 -7.02 -54.56050 6 st2 -

当我尝试使用以下数据的聚合进行统计时-例如- 存储了奇怪的输出大小

        group    O18        D
    1   st1    -6.89    -53.52709
    2   st1    -7.16    -56.75802
    3   st1    -7.17    -54.79471
    4   st2    -7.09    -54.98376
    5   st2    -7.02    -54.56050
    6   st2    -6.99    -55.55472
我使用的命令是:

statistic <- aggregate(. ~ group, data=dt, FUN = function(x) 
                       c(mean=mean(x), sd=sd(x)))
但是当我刚进去的时候

aggregate(. ~ group, data=dt, FUN = function(x) c(mean=mean(x), sd=sd(x)))
下面是印刷品

  group    O18.mean      O18.sd      D.mean        D.sd
1   st1 -7.07333333  0.15885003 -55.0266058   1.6278974
2   st2 -7.03333333  0.05131601 -55.0329908   0.4989327
我想将第二个输出作为存储的数据集,而不仅仅是打印的
在第一次输出中,数据集的大小被定义为2*3,即使有第3行和第4行,当我们使用多个函数结果串联在一起(
c(mean=mean(x),sd=…)
)时,我不能使用sd值

,结果中的列将被强制为
矩阵
。因此,
视图(输出)
显示的格式与预期不同。一个可能的选择是通过再次调用
data.frame
来更改某些列的
矩阵
格式

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

 str(output)
 #'data.frame': 2 obs. of  5 variables:
 #$ group   : Factor w/ 2 levels "st1","st2": 1 2
 #$ O18.mean: num  -7.07 -7.03
 #$ O18.sd  : num  0.1589 0.0513
 #$ D.mean  : num  -55 -55
 #$ D.sd    : num  1.628 0.499

是的,这是完全相同的代码,除了定义我不能做一个数据数组时,我存储有没有人有同样的问题?还是我错过了什么?@Khashaa,对不起-你是什么意思?试着转换到data.frame,即
do.call(data.frame,statistic)
。由于统计数据中只有三个变量,所以第2列和第3列是矩阵。尽管如此,我无法在
r3.1.2
@JinaJeong中重现这个问题。您是否尝试过
do.call(data.frame,aggregate(.~group,data=dt,FUN=function(x)c(mean=mean(x),sd=sd(x))
什么叫“存储数据集”?
output <- do.call(data.frame, aggregate(. ~ group, data=dt,
         FUN = function(x) c(mean=mean(x), sd=sd(x))))

 str(output)
 #'data.frame': 2 obs. of  5 variables:
 #$ group   : Factor w/ 2 levels "st1","st2": 1 2
 #$ O18.mean: num  -7.07 -7.03
 #$ O18.sd  : num  0.1589 0.0513
 #$ D.mean  : num  -55 -55
 #$ D.sd    : num  1.628 0.499
 library(dplyr)
 output1 <- dt %>% 
              group_by(group) %>% 
              summarise_each(funs(mean, sd))
 str(output1)
 #Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 2 obs. of  5 variables:
 #$ group   : chr  "st1" "st2"
 #$ O18_mean: num  -7.07 -7.03
 #$ D_mean  : num  -55 -55
 #$ O18_sd  : num  0.1589 0.0513
 #$ D_sd    : num  1.628 0.499
 #- attr(*, "drop")= logi TRUE