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
如果您使用 dplyr
或 data.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
当我尝试使用以下数据的聚合进行统计时 - 例如 - 存储了奇怪大小的输出
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
如果您使用 dplyr
或 data.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