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

您所在的位置:网站首页 word上怎么求平均值 R语言 数据分组汇总:求平均值、标准差、标准误

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

2024-07-14 12:53| 来源: 网络整理| 查看: 265

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 1 F aspirin 5 -3.420000 0.8642916 0.3865230 #> 2 F placebo 12 -2.058333 0.5247655 0.1514867 #> 3 M aspirin 9 -5.411111 1.1307569 0.3769190 #> 4 M placebo 4 -0.975000 0.7804913 0.3902456

处理丢失的数据: 如果数据中有 NA 值,就需要设定参数 na.rm=TRUE ; length() 没有 na.rm 这个选项,因此只能 sum(!is.na(...)) 来计算有多少个非 NA 值

# 先放一点NA值进来 dataNA 2 F placebo 12 -2.058333 0.5247655 0.1514867 #> 3 M aspirin 7 -5.142857 1.0674848 0.4034713 #> 4 M placebo 3 -1.300000 0.5291503 0.3055050

2、函数 summarizeBy()

library(doBy) cdata sex condition change.length change.mean change.sd #> 1 F aspirin 5 -3.420000 0.8642916 #> 2 F placebo 12 -2.058333 0.5247655 #> 3 M aspirin 9 -5.411111 1.1307569 #> 4 M placebo 4 -0.975000 0.7804913 # 重命名 change.length 这一列为 N names(cdata)[names(cdata)=="change.length"] 1 F aspirin 5 -3.420000 0.8642916 0.3865230 #> 2 F placebo 12 -2.058333 0.5247655 0.1514867 #> 3 M aspirin 9 -5.411111 1.1307569 0.3769190 #> 4 M placebo 4 -0.975000 0.7804913 0.3902456

处理丢失数据: na.rm=TRUE 可以传递给 summaryBy() 调用的每个函数,除了 length()

# 写一个新版本的 length 让它可以识别 na.rm=T length2 3 M aspirin 7 -5.142857 1.0674848 #> 4 M placebo 3 -1.300000 0.5291503

扩充:安排一步得出均值、计数、标准差、标准误和置信区间的函数summarySE 写函数:

## 对数据进行汇总 ## 得到 计数, 均值, 标准差, 标准误 和 置信区间 (95%). ## data: 数据框 ## measurevar: 需要进行汇总的列 ## groupvars: 提供分组的列 ## na.rm: 一个布尔值,决定是否忽略NA ## conf.interval: 置信区间的百分比范围 (默认是 95%) summarySE 1 F aspirin 4 -3.425000 0.9979145 0.4989572 1.5879046 #> 2 F placebo 12 -2.058333 0.5247655 0.1514867 0.3334201 #> 3 M aspirin 7 -5.142857 1.0674848 0.4034713 0.9872588 #> 4 M placebo 3 -1.300000 0.5291503 0.3055050 1.3144821

用NA填充空白组合: 有时,汇总数据框中会出现空的因子组合,即有可能出现的因素组合,但实际上并没有出现在原始数据框架中。 在汇总数据框中自动用 NA 填入这些组合通常很有用。 为此,在调用 ddply() 或 summarySE() 时设置 .drop=FALSE 。

用法示例:

# 首先把 男性+安慰剂 组合的数据删去 dataSub sex condition N change sd se ci #> 1 F aspirin 5 -3.420000 0.8642916 0.3865230 1.0731598 #> 2 F placebo 12 -2.058333 0.5247655 0.1514867 0.3334201 #> 3 M aspirin 9 -5.411111 1.1307569 0.3769190 0.8691767 # 设置 .drop=FALSE 不放弃这些组合 summarySE(dataSub, measurevar="change", groupvars=c("sex", "condition"), .drop=FALSE) #> Warning in qt(conf.interval/2 + 0.5, datac$N - 1): NaNs produced #> sex condition N change sd se ci #> 1 F aspirin 5 -3.420000 0.8642916 0.3865230 1.0731598 #> 2 F placebo 12 -2.058333 0.5247655 0.1514867 0.3334201 #> 3 M aspirin 9 -5.411111 1.1307569 0.3769190 0.8691767 #> 4 M placebo 0 NaN NA NA NA

用0填充空白组合: 原理同上,但改用0填充

写用0填充的函数:

fillMissingCombs 3 M aspirin 9 -5.411111 1.1307569 0.3769190 0.8691767 #> 4 M placebo 0 0.000000 0.0000000 0.0000000 0.0000000

3、使用R自带的aggregate()

缺点是步骤较为繁琐 优点是不用安装新的R包

# 统计每个类别(性别*条件)中的受试者人数 cdata sex condition subject #> 1 F aspirin 5 #> 2 M aspirin 9 #> 3 F placebo 12 #> 4 M placebo 4 # 重命名 "subject" 这一列为 "N" names(cdata)[names(cdata)=="subject"] sex condition N #> 1 F aspirin 5 #> 2 M aspirin 9 #> 3 F placebo 12 #> 4 M placebo 4 # 按 sex 排序 cdata sex condition N #> 1 F aspirin 5 #> 3 F placebo 12 #> 2 M aspirin 9 #> 4 M placebo 4 # 同时保留 __before__ 和 __after__ 这两列: # 按性别和条件获取平均效应大小 cdata.means sex condition before after change #> 1 F aspirin 11.06000 7.640000 -3.420000 #> 2 M aspirin 11.26667 5.855556 -5.411111 #> 3 F placebo 10.13333 8.075000 -2.058333 #> 4 M placebo 11.47500 10.500000 -0.975000 # 合并数据框 cdata sex condition N before after change #> 1 F aspirin 5 11.06000 7.640000 -3.420000 #> 2 F placebo 12 10.13333 8.075000 -2.058333 #> 3 M aspirin 9 11.26667 5.855556 -5.411111 #> 4 M placebo 4 11.47500 10.500000 -0.975000 # 获取 "change"的样本 (n-1) 标准差 cdata.sd 1 F aspirin 0.8642916 #> 2 M aspirin 1.1307569 #> 3 F placebo 0.5247655 #> 4 M placebo 0.7804913 # 合并 cdata sex condition N before after change change.sd #> 1 F aspirin 5 11.06000 7.640000 -3.420000 0.8642916 #> 2 F placebo 12 10.13333 8.075000 -2.058333 0.5247655 #> 3 M aspirin 9 11.26667 5.855556 -5.411111 1.1307569 #> 4 M placebo 4 11.47500 10.500000 -0.975000 0.7804913 # 最后计算标准误 cdata$change.se sex condition N before after change change.sd change.se #> 1 F aspirin 5 11.06000 7.640000 -3.420000 0.8642916 0.3865230 #> 2 F placebo 12 10.13333 8.075000 -2.058333 0.5247655 0.1514867 #> 3 M aspirin 9 11.26667 5.855556 -5.411111 1.1307569 0.3769190 #> 4 M placebo 4 11.47500 10.500000 -0.975000 0.7804913 0.3902456

如果数据中有NA值并希望忽略它们,设置 na.rm=TRUE

cdata.means sex condition before after change #> 1 F aspirin 11.06000 7.640000 -3.420000 #> 2 M aspirin 11.26667 5.855556 -5.411111 #> 3 F placebo 10.13333 8.075000 -2.058333 #> 4 M placebo 11.47500 10.500000 -0.975000


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3