- 例解贝叶斯Meta分析基于R语言
- 张天嵩 董圣杰编著
- 1568字
- 2025-03-14 17:51:59
第二节 数据管理
一、数据类型与结构
R中常用的数据类型(type)包括整数(integer)、浮点数(double)、缺失值(NA)、复数(complex)、字符串(character)、逻辑值(logical)、原生型(raw)等。直接输入单个整数,被视为浮点数,如需要其必须为整数型,须在整数后加大写L,如1L。在形如m:n的序列中的元素被直接视为整数型。R中整数用32-bit存储,其范围大致在+/-2e9之内,不存在普通整数型与长整数型(long)之间的区别。单引号或双引号括起来的内容为字符串,对单字符与字符串不进行区分。单引号与双引号没有区别,但需要对应。逻辑值包括TRUE和FALSE。查看对象x的类型,可用函数class()/typeof()/mode(),基本命令格式相同,为:

R中有5种基本数据结构,分别是向量(vector)、矩阵(matrix)、数组(array)、数据框(data frame)和列表(list)。下文简单介绍5种基本数据结构,见图2-3。

图2-3 R中的数据结构
向量:向量中的元素必须是同一种数据类型,采用函数c()进行创建,如:

矩阵:具有维度(dim)属性,是维度为2的向量。创建矩阵的语法为:

其中,data参数指定原始向量的数据,nrow参数指定行数,ncol参数指定列数,默认将原有向量按照纵向排成矩阵。如创建1-12的3×4的矩阵:

数组与矩阵类似,但是维度可以大于2。数组可通过array()函数创建,形式如下:

如创建2×4×3的数组:

数据框由含不同模式(数值型、字符型等)数据的列组成,与SAS、SPSS和Stata中的数据集相类似。数据框可通过函数data.frame()创建:

其中,列向量col1,col2,col3,…可为任何类型(如字符型、数值型或逻辑型)。每一列的名称可由函数names()指定。
列表为R数据结构中最复杂的一种,是一些对象的有序集合。形象地讲可以理解为超市购物篮,可以放不同的物品。比如一个列表中可以是若干个向量、矩阵、数据框,甚至是其他列表的组合。用函数list()创建:

二、数据管理
数据的管理主要包括数据的输入、修改及保存。本书不涉及大型数据库的管理,所以将以本书常用的数据管理为主进行阐述。当数据量较少时,可以在R中直接输入。多数情况下,需要从R外部读入数据,有不同的包及函数读入不同格式的数据,例如readr包、haven包、foreign包等。表2-1列出了常见文件格式的读取函数:
表2-1 R读取常见文件格式的包及函数

R语言中对数据处理的包及函数比较多,其中tidyverse包提供了非常优秀的数据清理、整合和可视化的“一站式服务”。Hadley Wickham将自己所写的包整理成了一套数据处理的方法,统一整合到tidyverse包里,包括ggplot2、dplyr、tidyr、readr、purrr、tibble、stringr、forcats。tidyverse包的数据处理流程大致分为以下三类:①数据导入;②数据整理;③数据探索(可视化、统计分析)。
下面以卡介苗预防结核病数据为例,进行演示。首先获得数据,并保存于本地磁盘,再进行数据的读取及转换,数据读取后进行数据的管理。

数据结果如下:

由上述结果可知,新读入的bcg数据为tibble格式,其中author、alloc类型为chr,即字符串变量;其余为dbl,即双精度浮点型变量或实数。tibble是dataframe的升级版,有如下优点:①生成的数据框数据每列可以保持原来的数据格式,不会被强制性改变,如字符串变成因子格式;②查看数据时,在一行内显示;③数据操作速度会更快。可由tibble()函数构建。请注意,write.csv()导出数据会默认增加一列序号,所以read_csv()函数再读入R时会有一个“X1”列。
tidyverse包中的dplyr包数据处理功能强大,主要包括以下函数:①filter():据条件过滤数据;②arrange():根据某一列的数据对行排序;③select():只保留部分列的数据;④mutate():增加新的列;⑤summarise():数据的统计特征;⑥group_by():对数据分组。下面进行简单演示,选取bcg数据中trial、tpos、tneg、cpos、cneg变量,并生成新的变量or值,命令如下:

命令中的%>%为管道函数,可理解为变量的传递函数,管道前数据用于管道后面的函数。管道函数可明显减少中间变量的个数,简化编程。
运行上述命令后,R软件会出现如下结果:

由上述结果可知,mutate()函数产生一个新的变量or,而bcg数据集并没有改变。tidyverse包功能强大,读者可参考帮助文件或R for Data Science图书。