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

R - aggregate create strange size of dataset after store

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

        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)))

输出:'statistic (2 obs. of 3 variables)' 存储为 ;

    group       O18          D
1   st1     -7.07333333 -55.0266058
2   st2     -7.03333333 -55.0329908
3            0.15885003  1.6278974
4            0.05131601  0.4989327

但是当我刚进入时

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 行,我也不能使用 sd 值

当我们使用 aggregate 连接多个函数结果 (c(mean=mean(x), sd=...)) 时,结果中的列将被强制转换为 matrix。因此,View(output) 显示的格式与预期的不同。一种可能的选择是通过再次调用 data.frame 来更改某些列的 matrix 格式。

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

如果您使用 dplyrdata.table 解决方案,这将不是问题

 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