最近给部门内对生信感兴趣的同事科普基础知识(或者叫培训?),由于大家平时手头任务重,时间紧,那就只能介绍最实用的“干货”,本着2/8原则:学习最重要的 20% 的知识,解决 80% 的问题。大家可以参考,内容跟内部培训的差不多,只是没有 PPT。
有同学问要怎么把自己的数据读入 R,由于 tidyverse
工具套件的简单高效,是我们数据处理的优先选择。因此这里介绍tidyverse
里的两个包:readr
、 readxl
,一个读取文本文件,一个读取 Excel 文件,这两种文件是平时用得最多的。
install.packages("tidyverse")
library(knitr)
library(readr)
library(readxl)
# 或者直接加载整个 tidyverse 环境: library(tidyverse)
生信中的文本文件,大多数都是 Tab
键隔开的表格数据,可用下面两个函数来读取或者保存:
Tab
键隔开的文本文件的内容到数据框中。为了演示,我们这里使用 R 自带的一个“鸢尾花”数据集: iris
,该数据集有 5 列,分别是:花萼长度、花萼宽度、花瓣长度、花瓣宽度以及花的种类。
iris
数据集默认已经加载到了内存里,先查看一下前几行内容:
kable(head(iris))
Sepal.Length | Sepal.Width | Petal.Length | Petal.Width | Species |
---|---|---|---|---|
5.1 | 3.5 | 1.4 | 0.2 | setosa |
4.9 | 3.0 | 1.4 | 0.2 | setosa |
4.7 | 3.2 | 1.3 | 0.2 | setosa |
4.6 | 3.1 | 1.5 | 0.2 | setosa |
5.0 | 3.6 | 1.4 | 0.2 | setosa |
5.4 | 3.9 | 1.7 | 0.4 | setosa |
先把iris
保存到硬盘上,后面再读入(就懒得专门去找文件读入了)。
write_tsv(iris, 'iris.tsv')
iris
的内容就被保存到当前目录下的iris.tsv
文件中了,文件的每一行由Tab
键隔开。
df = read_tsv('iris.tsv')
硬盘上iris.tsv
文件内的内容被读取到了df
数据框中,显示一下df
前几行内容:
kable(head(df))
Sepal.Length | Sepal.Width | Petal.Length | Petal.Width | Species |
---|---|---|---|---|
5.1 | 3.5 | 1.4 | 0.2 | setosa |
4.9 | 3.0 | 1.4 | 0.2 | setosa |
4.7 | 3.2 | 1.3 | 0.2 | setosa |
4.6 | 3.1 | 1.5 | 0.2 | setosa |
5.0 | 3.6 | 1.4 | 0.2 | setosa |
5.4 | 3.9 | 1.7 | 0.4 | setosa |
有时候,文件每行的值是由逗号隔开的,就用:
如果文件内容保存在 Excel 文件中,则可以通过 readxl
包中的read_excel
来读入:
df = read_excel('iris.xlsx')
read_excel
函数有一个很有用的参数:sheet
,可以用来指定读取文件中的第几个 sheet 的内容,用法:
# 指定 sheet 的名称
df = read_excel('iris.xlsx', sheet = 'iris') # 读取 sheet 名为 iris 的表的内容
# 指定 sheet 的位置
df = read_excel('iris.xlsx', sheet = 5) # 读取第 5 个 sheet 的内容
有人可能要问,那要写入 Excel 文件呢,有 write_excel 函数吗?答案是没有。我们平时保存文件的时候,尽量保存为文本文件,因为文本文件是计算机程序数据共享的最佳格式,数据保存为文本格式有许多便利,特别是需要在不同程序/包中共享数据的时候。
如果真要保存为 Excel,推荐下面的包,本文就不演示了。
大多数情况下,三个函数就够了,其他文件格式的读/写确有需要的时候再查,这三个函数的使用是需要牢记于心的。
这就是:学习的 2/8 法则,20%的知识,解决80%的问题。
本次分享就到这里了,下次我们再介绍另外一种重要的文件:json
文件的读写。下期内容更干哈,我会顺便介绍肿瘤的 20 条信号通路的基因怎么整理,怎么最终保存到 json
文件中供以后随时调用,敬请期待。