查看原文
其他

R语言元分析专题第三章:数据导入和预处理

荷兰心理统计联盟 荷兰心理统计联盟 2023-02-03



元分析 第三章

数据导入和预处理





为了在 R 中进行元分析,你需要准备好你的研究数据(实际上任何分析都一样)。在本期的文章中,我们将介绍如何准备数据,将数据导入 R 以及对数据进行初步的预处理。

目录


1. 数据准备
2. 将数据导入R
3. 数据预处理

01 数据准备
█ █ █
首先,你需要准备好你的数据文件。这一步非常简单,实际上不需要任何 R 相关的知识,通常数据都会以表格的形式存储在 Excel 中,常见的格式有 xls , xlsx , csv 等,这里推荐使用 csv 格式,因为 xls 格式较为复杂。此外,其他常见的数据格式有 sav (SPSS数据),txt 和 dat(文本格式)等,使用这些方法保存数据也是可以的。

一般来讲,数据表格的每一行表示一个个案( or 被试),而每一列则代表一个变量,恰当地对变量进行命名是一个好习惯,变量名最好是英文。同时,可以对数据进行初步的筛查,如异常值,缺失值等。


02 将数据导入RStudio
█ █ █
Rstudio 提供了两种导入数据的方法:
❶ 第一种方法和 SPSS 等软件类似,即通过菜单命令导入:
针对上面提到的几种数据类型,可以选择相应的选项进行导入:

xls ,csv 数据文件 —— From Excel
sav 数据文件 —— From SPSS
txt 数据文件 —— From Text(readr)

选择之后出现如下界面:

点击右上角的 Browse... ,选择保存好的数据文件,即可看到数据出现在预览框中:

在预览界面可以看到变量的名称和数据类型(这个会在后面详细介绍),点击后会弹出几个选项,前三个用来改变该变量数据的类型:Character(字符型),Numeric(数值型),Data(日期型),Include 则表示该变量会被读取,Skip 表示在读取时跳过该变量,即在后续的分析过程中无需使用该变量的数据。同时在右下角可以看到相应的代码(可以忽略),我们只需要点击 Import ,数据导入就完成了:

这里我选择了跳过 Age 变量,因此读取的数据只会包含 5 个变量。

❷ 如果你已经掌握了一些基本的编程知识,你将会更喜欢第二种方法——直接写代码来导入数据(只需要一行代码,so easy ~)

在这之前还需要一点小小的准备工作,R 是使用工作目录(working direction)来完成读写文件的,下面两个命令需要记住:
getwd() —— 获取当前的工作目录
setwd() —— 设置工作目录(这个更常用)


首先将工作目录设置为数据文件所在的位置,设置完成后 R 将在该工作目录下读取和写入相关文件。

setwd('D:\\桌面\\数据分析与R')

Tips:路径字符可以是 / ,也可以是 \\ ,但不能是 \ 。(就是这么不讲道理,来打我呀~)

接下来就是读取数据了,R 可以使用 read.table 函数来读取文本类型的数据文件:

LungCapData <- read.table('LungCapData.txt')

LungCapData <- read.table('LungCapData.dat')

read.table 函数有好几种变体形式,如 read.csv 可以读取 csv 数据文件:

LungCapData <- read.csv('LungCapData.csv',header = T)


Tips:这里需要注意的一个参数是 header,它有两个取值,T 表示读取数据时会提取第一行的变量名,而 F 则表示在读取时不提取变量名,此时 R 会自定创建变量名为 v1,v2......简单来说,如果你的数据包含了变量名则选择 T , 否则选 F

如果你没有事先设置好工作目录,则需要给出数据文件的完整路径,如下所示:
LungCapData <- read.csv('D:\\桌面\\数据分析与R\\LungCapData.csv',header = T)

关于数据的导入就介绍到这里,个人认为只需要熟悉其中任意一种方法就可以满足大部分的分析需要了,除非你遇到奇怪格式的数据文件,同时你又不能把它转换成常见的数据格式,这种情况一般很少见。
03 数据预处理
█ █ █
接下来介绍一些数据的基本操作,下面是常见的数据类型:
通常数据导入 R 后以数据框(data frame)的形式保存,数据框可以包含不同类型的数据,但每一列的长度必须相等。以上面导入的数据集为例,包含了以下数据:

LungCap —— 肺活量,数值型数据;
Age —— 数值型数据;
Height —— 数值型数据;
Smoke —— 因子;
Gender —— 因子;
Caesrean —— 因子;

在进行正式的分析之前,我们还需要对数据做一些初步的分析,包括检查数据是否存在缺失,异常值,每个变量的数据类型是否合理以及对数据进行特定的筛选等。

3.1 缺失值分析
在进行数据分析时,往往会遇到部分数据缺失的情况,这会影响最终的分析结果,因此对数据进行缺失值分析是有必要的。

在 R 中,缺失值标记为 “NA”,而识别数据是否缺失可以使用 is.na() 函数,举例如下:
data1<-read.csv('Framingham.csv')
is.na(data1)

该函数会针对数据集的每个元素返回一个逻辑值,TRUE 表示该处数据缺失,FALSE 表示未缺失。但当数据比较多时这样看显然太不方便了,这里介绍其他几个函数:

any(is.na(data1))

这行代码可以查看整个数据是否存在缺失,只要存在缺失值(无论多少)都会返回 TRUE


complete.cases(data1)

该函数针对数据的每一行进行检测,返回的结果表明该行数据是否完整,因此 TRUE 表示该行数据没有缺失;因为数据集很大,因此这样看还是很不方便,我们可以结合 which() 函数找出存在缺失数据的行:


此外,还可以使用 summary() 函数查看数据集的均值、分布及缺失值等概要信息。

从这里可以看出,scl 变量包含33个缺失数据,bmi变量包含9个缺失数据。


至此,我们知道了如何检查某个数据是否缺失,整个数据集是否缺失,每个个案(or 被试)以及每个变量的数据是否缺失。当缺失数据的比例较小时,我们可以考虑直接删除缺失数据,使用剩余的数据进行分析。我们同样也可以在excel中进行缺失数据检查,但当数据很大时,一行代码无疑是更加方便的方法。


3.2 数据类型转换

在 R 中,任何数据类型都可以相互转换,可以使用 as 系列函数。在实际的数据分析中,常见的数据转换有两种:
转换为因子(factor)
在 LungCapData 数据集中,如果我们一开始导入数据的时候将 Gender 变量的数据变成了字符型(character):
str(LungCapData$Gender)

str() 函数可以查看一个对象的内部结构,此时 Gender 中的数据均为字符型(有引号),可以使用 as.factor 将其转换为因子:
LungCapData$Gender <- as.factor(LungCapData$Gender)

可以看到 Gender 已经变成了因子。当然也可以反向操作,将因子数据转为字符型数据,使用 as.character 函数即可。
转换为逻辑值(logicals)
LungCapData 数据中的 Smoke 变量是指该被试是否有吸烟史,这样的变量数据可以转换为逻辑性,使用 as.logical 函数,TRUE 表示该被试有吸烟史(yes),FALSE 表示没有(no)。操作如下:

LungCapData$Gender == 'yes' 是为了指定 yes 为 TRUE

3.3 数据筛选
有时我们需要选择某些特定的数据进行分析或者在进一步的分析中排除某些数据。
R 中的 dplyr 包可以执行常见的一些数据操作,如过滤,选择特定的列、重新排序行、添加新列和汇总数据;这里进行部分演示:
选择特定的列(变量)

同样以上面的 LungCapData为例,假如我们想选择其中的 “LungCap” 和 “Age” 两列数据进行分析,可以使用 dplyr 中的 select 函数

select(LungCapData, LungCap, Age)

也可以将筛选后的数据保存为一个新的数据集:

New_data <- select(LungCapData, LungCap, Age)


选择特定的行(个案)
假如我们想要选出所有男性的数据(Gender = male), 可以使用 filter 函数

New_data <- filter(LungCapData, Gender == 'male')

(注意 R 中的等于是 “==”,而 male 是字符串,所以要加引号)

可以看到此时 Gender 变量就只剩下 male 了。同样,如果想要筛选出年龄大于10的个案:

New_data <- filter(LungCapData, Age > 10)

多重筛选条件——选出年龄大于 10男性被试:

New_data <- filter(LungCapData, Age > 10, Gender == 'male')

更多数据操作和 dplyr 的功能可点击下面的网址进行探索:

https://genomicsclass.github.io/book/pages/dplyr_tutorial.html


本期内容均为使用 R 进行数据分析前的准备工作和一些基本操作,实际上并不涉及真正的元分析(所以你可能看到了一个假标题。。),但在进行任何数据分析之前这些工作都是必不可少的。从下期开始,我们将会逐渐介绍具体的元分析在 R 中是如何实现的。

本期的数据文件可以通过下面的链接下载:

https://pan.baidu.com/s/1NE9L6lC5BYUut7kV1u-LBw 提取码: cetv



本期录屏(无声动画版)



笔记整理
朱宇航  汉堡大学/屠西茜  西南大学/ 李闻怡 佛罗里达州州立大学/ 张玥 河海大学/ 赵瑞瑛 阿姆斯特丹自由大学/ 高雨轩 贵州师范大学/ 郭治辰 江西师范大学
排版:郭治辰

往期精选
洞见:职业健康心理学家Wilmar Schaufeli——17万引用次数的背后
重磅|20万字英文学术写作句库笔记正式发布
系统性文献综述&元分析数据分析及报告的29个建议
R语言元分析专题第二章:RStudio和基础
R语言实现元分析-随机对照干预研究
元分析高阶篇:中介模型分析—R metaSEM的运用
元分析所用R全部代码及详细解释
元分析入门免费公开课——Pim Cuijpers教授独家讲解
R语言元分析专题第二章:RStudio和基础



R元分析专题介绍:本活动是由荷兰心理统计联盟组织的第三次线上同辈互助学习活动,小组成员每周学习一章,并整理笔记录屏内容共享,从R基础到元分析效应量计算,作图,元分析高阶,如多水平meta, MetaSEM, network Meta-Analysis 。学习资料为《Doing Meta-Analsis in R 》这本书。



欢迎关注我们
一个专注于管理学及心理学学术研究的平台

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存