dxy logo
首页丁香园病例库全部版块
搜索
登录

组学方法与数据分析-R语言(高阶篇二)

发布于 2020-06-08 · 浏览 3004 · IP 陕西陕西
这个帖子发布于 4 年零 328 天前,其中的信息可能已发生改变或有所发展。

上期内容中简单介绍了R语言里常见的数据类型:比如向量(Vector),矩阵(Matrix),数组(Array),数据框(Data frame)和列表(List)。很多小伙伴依旧觉得R语言晦涩难懂且复杂。其实它的“难”主要在于以下两点:

1. 投入时间成本较大。很多小伙伴去学习R只是为了出几幅“漂亮”的图,或者是为了实现其他数据分析和绘图软件无法实现的功能,因此希望可以直奔“主题”,然而“万丈高楼平地起”,不先学习R语言的基础知识,可能会导致后期直接学习某个函数包(Packages)时甚至连教程都看不明白,然而熟悉并掌握R的基础操作又意味着大量的时间付出,这似乎是一种矛盾。

2. 不够形象直观。为何我们喜欢在Excel或GraphPad中录入数据和绘图?因为这些界面符合我们对数据的直观认识。为何我们更喜欢动动鼠标,点点确定就可以既出图又出统计分析结果?因为我们既往认知中的“软件”理所当然就应该这样“简单友好”。如果它不够直观,那么“对不起,学起来太难了”。

如何客服这种“畏难”情绪呢?“小虫”对此有两个建议:

1. 如果小伙伴们在作图或者统计分析中遇到的困难必须借助R解决,其他相对简单的工具如GraphPad、SPSS、SigmaPlot等确实无法解决,但这个问题又必须解决,无法绕开,那么只能尽量沉下心来学习R(时间充裕者可以阅读R相关书籍,时间较少者可以浏览相关公众号的知识干货,比如咱们公众号(这句划掉)),相反,如果遇到的问题借助其他简单的软件就可处理,那么没必要浪费时间在R上(人生如白驹过隙,多看看世界,陪陪家人不也挺好)。

2. 学习是一个化难为易,化陌生为熟悉的过程,因此,既然我们过去多年间看到的数据都是在表格中呈现,那么在R语言中,当我们无法直观感受到一组数据时,多使用view()功能,让数据以“熟悉”的方式呈现,也能推动我们深入学习。如图1所示:使用view(studentdata)可使对象studendata内的数据以表格形式呈现,看起来比较“亲切”。此外,随着进一步学习,我们会了解到更多“直观化”的方法。

img

图1 使用view()功能查看对象

那么,既然要分析数据并绘图,首先就是导入数据。R具有强大的外部数据导入功能,可导入的数据类型包括文本格式(Text files)、电子表格格式(Microsoft Excel)、数据库格式(Access、SQL等)、网页格式以及其它数据处理软件格式(SAS、SPSS、Stata等),如图2所示。

img

图2 可导入R的外部数据类型

每种数据格式的导入方法都不同,大家可以根据实际工作中常碰到的数据格式有选择性地重点学习,后期用R导入.CEL格式的芯片数据等则需要调用专门的Packages,这点后面再聊。这里主要介绍.txt,.csv以及.xlsx文件的导入方法。实际工作中我们常会将原始数据录入在Excel中(或者各种实验软件导出的数据格式多为.xlsx),后期作图时再将这些数据拷贝至GraphPad等处,因此,将Excel数据导入到R中,是利用R分析处理数据的第一步。

在此之前,我们先来了解在R中如何通过键盘录入数据。除了上期内容中讲到的利用data.frame()构建一组数据外,还可以通过下面的方法在R中直接调出类似Excel的表格窗口,然后直接录入数据。比如有4个变量(name、age、weight、gender)对应了4条记录。如图3所示。那么如何将这一原始数据手动录入到R中呢?

img

图3 原始数据

我们可以输入下面的代码:

studentdata <- data.frame(name=character(0), age=numeric(0), weight=numeric(0), gender=character(0))

studentdata <- edit(studentdata)

其实第一行代码相当于我们构建了一个包含4个变量的数据框(或者直观地说,就是表格),然后第二行代码就是调出表格供我们输入数据。值得注意的是,在第一行代码中如“name= character(0)”相当于提前规定了name这一变量属于字符型(character)变量。其余也是同此道理,而0则是目前表格中该变量数据尚未录入的意思。输入这两行代码后结果如图4所示。

img

图4 在R中调出类似Excel的窗口

然后在表格中录入相应的数据即可。当然也可在var5、var6等处编辑新的变量名,操作同Excel。尽管弹出这样的表格窗口令人感到“亲切”,然而当数据量较大时,手动录入会耗时费力。因此我们需要直接将Excel中的数据导入至R中。一般有3种方法:

1. 将Excel中的数据另存为.txt格式(又叫制表符分隔的文本文件),比如将图3中的数据另存为“studentdata.txt”的文件,并将该文件放置于R的工作目录下,一般默认是在“C盘/用户/文档”的位置。具体如何查找R的工作目录可以参考之前的一期内容《组学方法与数据分析—R语言(进阶篇)》,然后利用R自带的read.table()功能导入.txt文件。具体代码如下:

mydata1 <- read.table('studentdata.txt', header=T)

view(mydata1)

这里的“studentdata.txt”对应了拟导入的文件,每一个字符须完全一致,否则软件会报错。当然我们也可以先输入引号(''),然后点击键盘上的“Tab”键,弹出该工作目录下的所有文件,然后选择拟导入的文件即可。结果如图5所示。

img

图5 导入.txt文件

这里header=T表示Excel中的第一行是否为标题。我们可以将header=T改为header=F(或者header=FALSE),将两者的结果进行比对。如图6所示。

img

图6 header=F后的结果

2. 将Excel中的数据另存为.csv格式(又称逗号分隔的数据文件),比如将图3中的数据另存为“studentdata.csv”的文件,并将该文件放置于R的工作目录下,然后利用R自带的read.csv()功能导入.csv文件。具体代码如下:

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

view(mydata2)

同样地,“studentdata.csv”对应了拟导入的文件,每个字符须完全一致,否则软件会报错。当然也点击“Tab”键,在弹出的所有文件中选择拟导入的文件。这里header=T的用法同前。结果如图7所示。

img

图7 导入.csv文件

3. 直接将.xlsx文件导入R。需要先安装并加载一个函数包(openxlsx),具体代码如下:

install.packages('openxlsx')

library('openxlsx')

然后将名为“studentdata.xlsx”的文件同样放置于R的工作目录下,利用openxlsx函数包中的read.xlsx()功能导入Excel文件,具体代码如下:

mydata3 <- read.xlsx('studentdata.xlsx', sheet=1)

view(mydata3)

这里sheet=1的意思是导入Excel中的第一个表格(如果有多个表格的话)。假如该文件中只有一个表格,那么sheet=1也可省略不写。结果如图8所示。

img

图8 导入.xlsx文件

当然,也可以安装并加载xlsxXLConnect的Packages,但这两个包需要依赖Java环境,因此附带下载的软件会增多,不过大家可以自行尝试一下,也很好用。

以上是Excel文件导入R的几种方法。如果小伙伴们需要导入SPSS、SAS或者网页文件时,也有对应的方法,可以参考ROBERT I. KABACOFF所著的《R in action,second edition》。这里不多赘述了。

最后编辑于 2022-10-09 · 浏览 3004

回复15 1

全部讨论0

默认最新
avatar
分享帖子
share-weibo分享到微博
share-weibo分享到微信
认证
返回顶部