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