R数据科学整洁之道:使用 readr 进行数据导入

2022-11-11 16:12:53 浏览数 (1)

最近给部门内对生信感兴趣的同事科普基础知识(或者叫培训?),由于大家平时手头任务重,时间紧,那就只能介绍最实用的“干货”,本着2/8原则:学习最重要的 20% 的知识,解决 80% 的问题。大家可以参考,内容跟内部培训的差不多,只是没有 PPT。

有同学问要怎么把自己的数据读入 R,由于 tidyverse 工具套件的简单高效,是我们数据处理的优先选择。因此这里介绍tidyverse里的两个包:readrreadxl,一个读取文本文件,一个读取 Excel 文件,这两种文件是平时用得最多的。

安装

代码语言:javascript复制
install.packages("tidyverse")

加载包

代码语言:javascript复制
library(knitr)
library(readr)
library(readxl)

# 或者直接加载整个 tidyverse 环境: library(tidyverse)

用 readr 读/写文本文件

生信中的文本文件,大多数都是 Tab 键隔开的表格数据,可用下面两个函数来读取或者保存:

  • read_tsv,读取Tab键隔开的文本文件的内容到数据框中。
  • write_tsv,与 read_tsv 相反,将数据框中的内容保存到文本文件中。

为了演示,我们这里使用 R 自带的一个“鸢尾花”数据集: iris,该数据集有 5 列,分别是:花萼长度、花萼宽度、花瓣长度、花瓣宽度以及花的种类。

查看数据集

iris数据集默认已经加载到了内存里,先查看一下前几行内容:

代码语言:javascript复制
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保存到硬盘上,后面再读入(就懒得专门去找文件读入了)。

代码语言:javascript复制
write_tsv(iris, 'iris.tsv')

iris的内容就被保存到当前目录下的iris.tsv文件中了,文件的每一行由Tab键隔开。

读取数据集

代码语言:javascript复制
df = read_tsv('iris.tsv')

硬盘上iris.tsv文件内的内容被读取到了df数据框中,显示一下df前几行内容:

代码语言:javascript复制
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

有时候,文件每行的值是由逗号隔开的,就用:

  • read_csv
  • write_csv

用 readxl 读取 Excel 文件

如果文件内容保存在 Excel 文件中,则可以通过 readxl包中的read_excel来读入:

代码语言:javascript复制
df = read_excel('iris.xlsx')

read_excel函数有一个很有用的参数:sheet,可以用来指定读取文件中的第几个 sheet 的内容,用法:

代码语言:javascript复制
# 指定 sheet 的名称
df = read_excel('iris.xlsx', sheet = 'iris')  # 读取 sheet 名为 iris 的表的内容

# 指定 sheet 的位置
df = read_excel('iris.xlsx', sheet = 5)  # 读取第 5 个 sheet 的内容

有人可能要问,那要写入 Excel 文件呢,有 write_excel 函数吗?答案是没有。我们平时保存文件的时候,尽量保存为文本文件,因为文本文件是计算机程序数据共享的最佳格式,数据保存为文本格式有许多便利,特别是需要在不同程序/包中共享数据的时候。

如果真要保存为 Excel,推荐下面的包,本文就不演示了。

  • xlsx

最后小结

大多数情况下,三个函数就够了,其他文件格式的读/写确有需要的时候再查,这三个函数的使用是需要牢记于心的。

  • read_tsv
  • write_tsv
  • read_excel

这就是:学习的 2/8 法则,20%的知识,解决80%的问题

下期预告

本次分享就到这里了,下次我们再介绍另外一种重要的文件:json 文件的读写。下期内容更干哈,我会顺便介绍肿瘤的 20 条信号通路的基因怎么整理,怎么最终保存到 json文件中供以后随时调用,敬请期待。

0 人点赞