R语言 数据分组汇总:求平均值、标准差、标准误

Summarizing data 汇总数据

当你想按组对数据进行汇总(包括平均值、标准差等)

这里介绍的三种方法可以根据某些指定变量对数据进行分组
并对每组应用汇总函数(如平均值、标准差等):

1、函数 ddply() ,来自 plyr 包,最容易使用的

2、函数 summarizeBy() ,来自 doBy 包,比较容易使用

3、函数 aggregate() ,来自R base 包,较难使用

示例数据
不同性别受试者,服用阿斯匹林或安慰剂前后的观测值以及变化差值
由性别和条件的组合来分组:F-安慰剂、F-阿司匹林、M-安慰剂和 M-阿司匹林
并希望计算出每个组的:
1) N(个体数)
2) mean of change(变化均值)
3) standard deviation(标准差)
4) standard error of the mean (均值标准误差)

data <- read.table(header=TRUE, text='
 subject sex condition before after change
       1   F   placebo   10.1   6.9   -3.2
       2   F   placebo    6.3   4.2   -2.1
       3   M   aspirin   12.4   6.3   -6.1
       4   F   placebo    8.1   6.1   -2.0
       5   M   aspirin   15.2   9.9   -5.3
       6   F   aspirin   10.9   7.0   -3.9
       7   F   aspirin   11.6   8.5   -3.1
       8   M   aspirin    9.5   3.0   -6.5
       9   F   placebo   11.5   9.0   -2.5
      10   M   placebo   11.9  11.0   -0.9
      11   F   aspirin   11.4   8.0   -3.4
      12   M   aspirin   10.0   4.4   -5.6
      13   M   aspirin   12.5   5.4   -7.1
      14   M   placebo   10.6  10.6    0.0
      15   M   aspirin    9.1   4.3   -4.8
      16   F   placebo   12.1  10.2   -1.9
      17   F   placebo   11.0   8.8   -2.2
      18   F   placebo   11.9  10.2   -1.7
      19   M   aspirin    9.1   3.6   -5.5
      20   M   placebo   13.5  12.4   -1.1
      21   M   aspirin   12.0   7.5   -4.5
      22   F   placebo    9.1   7.6   -1.5
      23   M   placebo    9.9   8.0   -1.9
      24   F   placebo    7.6   5.2   -2.4
      25   F   placebo   11.8   9.7   -2.1
      26   F   placebo   11.8  10.7   -1.1
      27   F   aspirin   10.1   7.9   -2.2
      28   M   aspirin   11.6   8.3   -3.3
      29   F   aspirin   11.3   6.8   -4.5
      30   F   placebo   10.3   8.3   -2.0
 ')

1、使用 ddply()

library(plyr)

# ddply参数
ddply(data, variables, fun = NULL, ... , progress = 'none' , drop = TRUE , parallel = FALSE)
# - data : 要处理的数据框
# - variables :分组变量,可以是公式,也可以是字符向量
# - fun:处理分组数据的函数

cdata <- ddply(data, c("sex", "condition"), summarise,
               N    = length(change),    # 长度即总数
               mean = mean(change),      # 求平均值
               sd   = sd(change),        # 求标准差
               se   = sd / sqrt(N)       # 求标准误
)

cdata
#>   sex condition  N      mean        sd        se
#> 1   F   aspirin  5 -3.42000
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值