平均值表(SD)s

时间:2016-08-08 19:14:32

标签: r dataframe mean standard-deviation

我有一个相对较大的数据集,我想打印一个因子组合的均值和标准差表。我希望它们的格式如下:

         A            B
test1    2.0 (1.0)    5.0 (2.0)
test2    6.3 (3.1)    2.1 (0.7)

有一种简单的方法吗?

我最接近的是使用tables::tabular函数(最小示例):

# Example data
df = data.frame(
   group=c('A', 'A',  'A', 'B', 'B', 'B'),
   value=c(1,2,3,6,8,9))

# Print table     
library(tables)
tabular(value ~ group * (mean + sd), df)

...输出:

       group               
       A        B          
       mean  sd mean  sd   
 value 2     1  7.667 1.52

但我还没有找到一种巧妙的方法将这种格式转换为上面的mean (SD)格式。注意:这些示例非常小。我将有一个更大的层次结构(目前4 x(平均值+ sd)列和2 x 3行)但基本问题是相同的。

2 个答案:

答案 0 :(得分:2)

从data.table,我们可以使用dcast(包括您的测试变量):

library(data.table)

df = data.frame(
  group=c('A', 'A',  'A', 'B', 'B', 'B','A', 'A',  'A', 'B', 'B', 'B'),
  value=c(1,2,3,6,8,9,1,2,3,6,8,9),
  test=c(1,1,1,1,1,1,2,2,2,2,2,2))

dcast(df, test ~ group, fun.aggregate = function(x){
  paste(round(mean(x),1)," (", round(sd(x),1),")", sep = "")
})
  test     A         B
1    1 2 (1) 7.7 (1.5)
2    2 2 (1) 7.7 (1.5)

答案 1 :(得分:2)

library(reshape2)

formatted.table <- dcast(df, 'value' ~ group, fun.aggregate = function(x) {
    return(sprintf('%0.1f (%0.1f)', mean(x), sd(x)))
})

# "value"         A         B
#   value 2.0 (1.0) 7.7 (1.5)

与Chris的答案相似,但有点清洁(并且不需要“测试”变量)。

您还可以使用dplyr包进行此类聚合。