抽取数据时group by_每天学习一点R:26.数据的分类统计

837cec8189413ed79ac81150a63e5fe1.png

在处理数据的过程中,我们经常需要对数据进行一些计算,例如求平均值、标准差、统计数据的出现频数等等,这些计算可以很容易的在excel中进行,但是当我们的数据较大或者需要根据一套数据的分组信息来分别对不同组数据进行统计时,使用excel进行重复操作的时间成本较高,并且在大量操作的过程中还容易出现一些错误。

本节内容我们来介绍如何使用R语言按照特定的条件对数据进行分类统计


分组统计

aggregate()

aggregate()可以根据数据中的一个分组信息列,统计数据集中其它列数据对应各组的平均值、总和和标准偏差等。

aggregate()函数每次运行只能计算单一的一种数据统计

aggregate有两种使用方式:

aggregate(x, by, FUN, ..., simplify = TRUE)aggregate(formula, data, FUN, ..., subset, na.action = na.omit)

各参数意义:

  • x为进行统计的数据;

  • by为分组方式;

  • FUN为统计的函数,如平均值、总和、标准偏差等;

  • simplify定义结果是否形成一个向量或矩阵;

  • formula为分析的公式,data为分析数据;

  • subset定义是否只对一部分数据进行分析;

  • na.action定义对NA值的处理方式。

mtcars#载入示例数据集aggregate(mtcars$mpg, by=list(vs=mtcars$vs), mean)#根据vs的分组计算mpg中各组数据的平均值以矩阵形式返回   vs        x1  0 16.616672  1 24.55714#另一种使用方式,基于公式aggregate(mpg~vs,data = mtcars, mean)   vs      mpg1  0 16.616672  1 24.55714

describeBy()

describeBy()函数是psych包中的一个命令,可以按照分组计算非缺失值的数量、平均数、标准差、中位数、截尾均值、绝对中位差、最小值、最大值、值域、偏度、峰度和平均值的标准误。

describeBy()函数的优势是可以同时返回各种统计结果

describeBy(x, group=NULL,mat=FALSE,type=3,digits=15,...)

各参数意义:

  • x为待分析的数据;

  • group为分组变量;

  • mat输出的文件是否是一个矩阵,如为FLASE,则输出一个list;

  • type定义输出的文件采用哪种偏度和峰度;

  • digits定义数据已矩阵形式输出需要现实多少个数值。

library(psych)describeBy(mtcars$mpg,mtcars$vs) Descriptive statistics by group group: 0   vars  n  mean   sd median trimmed  mad  min max range skew kurtosis   seX1    1 18 16.62 3.86  15.65   16.42 2.97 10.4  26  15.6 0.48    -0.05 0.91------------------------------------------------------------------ group: 1   vars  n  mean   sd median trimmed mad  min  max range skew kurtosis   seX1    1 14 24.56 5.38   22.8   24.34   6 17.8 33.9  16.1 0.41     -1.4 1.44

summaryBy()

上面的两个函数均是用来统计一个单数的数据变量,但很多时候我们需要针对一个分组同时统计多个不同的数据变量,此时可以使用summaryBy()函数。

summaryBy()函数是doBy包的一条命令,可以按照分组信息统计数据的个数、均值、标准偏差、偏度和峰度。

summaryBy(formula, data = parent.frame(), id = NULL, FUN = mean, keep.names=FALSE, p2d=FALSE, order=TRUE, full.dimension=FALSE, var.names=NULL, fun.names=NULL, ...)

各参数意义:

  • formula为进行统计的分析公式;

  • data为待分析数据;

  • id为在公式中没有指定的变量但是要在结果中显示;

  • FUN进行计算的函数,如总数、均值、标准偏差等;

  • keep.names如果为TRUE并且FUN中只有一个函数,则结果中变量的名字与输入的数据中变量名字一致;

  • p2d是否要将位于括号内的变量名用小圆点代替;

  • order是否结果文件中的变量按照公式中从右至左排列;

  • full.dimension如果为TRUE,则结果文件的行数会进行重复直至与输入数据行数一致。

通过在公式的左侧添加多个数据变量,可以同时对多个变量进行分类统计。

library(doBy)summaryBy(mpg+disp+hp~vs,data = mtcars)  vs mpg.mean disp.mean   hp.mean1  0 16.61667  307.1500 189.722222  1 24.55714  132.4571  91.35714

频数统计

除了上述讲到的计算平均数、标准偏差等应用,对分组数据进行频数统计也十分常用。

各组样本数目

统计一组数据中分别属于不同组的样本数目是一个很常见的问题,我们可以用table()函数来解决。

table(mtcars$vs) 0  1 18 14

结果中现实属于“0”组的样本数为18,属于“1”组的样本数为14.

区间统计

在某些情况下我们可能并没有数据的分组信息,而只是想知道位于某一区间内数据的个数,此时可以使用cut()结合table()函数进行处理。

比如此时我们想知道mtcars数据集中mpg处于10-20以及20-30范围内的样本个数。

mpg $mpg,breaks = c(10,20,30))table(mpg)mpg(10,20] (20,30]      18      10

扩展阅读

  • 高通量测序基础知识
  • 转录组测序技术和结果解读
  • 红皇后学术文献解读列表
  • 基本分子生物学实验
  • PAST:最简便易用的统计学分析软件教程目录
  • 每天学习一点R系列
  • 微生物群落数据分析系列教程
  • 微生物研究相关工具
  • 微生物研究投稿期刊简介

3fba40b6f94498f0b0881d8ecad561a2.png


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值