一遍就会师妹教你用R处理Excel文件中的生信数据
{ 点击蓝字,关注我们 }
在我们得到的生信数据中,有很多Microsoft Office Excel 工作表的格式。我们该如何用R处理他们呢,据小师妹了解R中有许多用于读取 Excel 文件的包,如 gdata,xlsx, xlsReadWrite,readxl。今天小师妹给大家着重介绍一下readxl包。
readxl包是一个R语言中的数据读取包,可以读取Excel文件中的数据。该包可以读取.xlsx和.xls格式的文件,使用简单方便,不需要安装Microsoft Excel或其他软件,支持读取.xlsx和.xls格式的文件,速度快,可以快速读取大型Excel文件,支持读取多个工作表,支持读取日期、时间和数值等多种数据类型,使用readxl包可以方便地将Excel文件中的数据导入到R语言中进行分析和处理,适用于数据分析、统计学习等领域。那么接下来就由小师妹来给大家介绍一下这个神奇的R包吧。
一
安装和载入
安装:install.packages("readxl")
载入:library(readxl)
二
相关操作
1. 读取表格
在小师妹进行讲解前我们需要准备几组数据,readxl 中包含一些示例文件,小伙伴们可以使用不带参数的 readxl_example() 来列出它们,如下所示我们可以看到以下文件。
> readxl_example()
[1] "clippy.xls" "clippy.xlsx" "datasets.xls" "datasets.xlsx" "deaths.xls"
[6] "deaths.xlsx" "geometry.xls" "geometry.xlsx" "type-me.xls" "type-me.xlsx"
我们还可以在 readxl_example() 中传入文件名来获取文件的路径,小师妹传入一个示例文件如下所示。
> readxl_example("type-me.xls")
library(ggplot2)
"C:/Users/24741/AppData/Local/R/win-library/4.3/readxl/extdata/type-me.xls"
然后readxl_example() 配合read_excel() 读取 xls 和 xlsx 文件,小师妹来句两个例子:
(1)读取 xls 文件
> readxl_example("datasets.xls") %>% read_excel()
# A tibble: 150 × 5
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
7 4.6 3.4 1.4 0.3 setosa
8 5 3.4 1.5 0.2 setosa
9 4.4 2.9 1.4 0.2 setosa
10 4.9 3.1 1.5 0.1 setosa
# ℹ 140 more rows
# ℹ Use `print(n = ...)` to see more rows
(2)读取 xlsx 文件
> readxl_example("datasets.xlsx") %>% read_excel()
# A tibble: 150 × 5
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
7 4.6 3.4 1.4 0.3 setosa
8 5 3.4 1.5 0.2 setosa
9 4.4 2.9 1.4 0.2 setosa
10 4.9 3.1 1.5 0.1 setosa
# ℹ 140 more rows
# ℹ Use `print(n = ...)` to see more rows
在我们处理生信数据的表格时,小伙伴们肯定遇到过一个 Excel 文件包含多个表这样的情况,小师妹接下来就讲解一下我们该如何取得我们想要的表格并进行一系列操作。
首先我们可以通过设置 sheet 参数来指定需要从 Excel 文件中读取的表。小师妹拿上面的例datasets.xlsx 文件来举例,在该文件中有一个名为 mtcars 的表。
> readxl_example("datasets.xlsx") %>% read_excel(sheet = 'mtcars')
# A tibble: 32 × 11
mpg cyl disp hp drat wt qsec vs am gear carb
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 21 6 160 110 3.9 2.62 16.5 0 1 4 4
2 21 6 160 110 3.9 2.88 17.0 0 1 4 4
3 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1
4 21.4 6 258 110 3.08 3.22 19.4 1 0 3 1
5 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2
6 18.1 6 225 105 2.76 3.46 20.2 1 0 3 1
7 14.3 8 360 245 3.21 3.57 15.8 0 0 3 4
8 24.4 4 147. 62 3.69 3.19 20 1 0 4 2
9 22.8 4 141. 95 3.92 3.15 22.9 1 0 4 2
10 19.2 6 168. 123 3.92 3.44 18.3 1 0 4 4
# ℹ 22 more rows
# ℹ Use `print(n = ...)` to see more rows
其次我们还可以获取所有的表格的表名,这时我们就用到了excel_sheets() 函数,效果如下:
> readxl_example("datasets.xlsx") %>% excel_sheets()[1] "iris" "mtcars" "chickwts" "quakes"
最后我们还可以通过传入表名的索引来获取对应表的数据,小师妹举个简单的例子:
> readxl_example("datasets.xlsx") %>% read_excel(sheet = 2)
# A tibble: 32 × 11
mpg cyl disp hp drat wt qsec vs am gear carb
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 21 6 160 110 3.9 2.62 16.5 0 1 4 4
2 21 6 160 110 3.9 2.88 17.0 0 1 4 4
3 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1
4 21.4 6 258 110 3.08 3.22 19.4 1 0 3 1
5 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2
6 18.1 6 225 105 2.76 3.46 20.2 1 0 3 1
7 14.3 8 360 245 3.21 3.57 15.8 0 0 3 4
8 24.4 4 147. 62 3.69 3.19 20 1 0 4 2
9 22.8 4 141. 95 3.92 3.15 22.9 1 0 4 2
10 19.2 6 168. 123 3.92 3.44 18.3 1 0 4 4
# ℹ 22 more rows
# ℹ Use `print(n = ...)` to see more rows
2.设置范围取数据
在很多时候我们得到的表格里的生信数据不全是我们想要的,那如何取得我们想要的和有用的数据这也成为了一个关键。接下来小师妹就介绍并举例如何用readxl来取得我们想要的数据。
(1)用 n_max 参数设置读取的行数
> readxl_example("datasets.xls") %>% read_excel(n_max = 2)
# A tibble: 2 × 5
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
<dbl> <dbl> <dbl> <dbl> <chr>
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3 1.4 0.2 setosa
(2)用 range 参数设置矩形的范围
> readxl_example("datasets.xls") %>% read_excel(range = "C1:F3")
New names:• `` -> `...4`
# A tibble: 2 × 4
Petal.Length Petal.Width Species ...4
<dbl> <dbl> <chr> <lgl>
1 1.4 0.2 setosa NA
2 1.4 0.2 setosa NA
(3)range 指定行或列的读取范围
> readxl_example("datasets.xls") %>% read_excel(range = cell_rows(1:3))
# A tibble: 2 × 5
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
<dbl> <dbl> <dbl> <dbl> <chr>
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3 1.4 0.2 setosa
(4) range 指定表格以及范围
> readxl_example("datasets.xls") %>% read_excel(range = "mtcars!A1:E4")
# A tibble: 3 × 5
mpg cyl disp hp drat
<dbl> <dbl> <dbl> <dbl> <dbl>
1 21 6 160 110 3.9
2 21 6 160 110 3.9
3 22.8 4 108 93 3.85
(5)还可以用 skip 参数设置在读取之前需要跳过的行数,当然如果设置了 range,则不会发挥作用
> readxl_example("datasets.xls") %>% read_excel(skip = 1, sheet = "chickwts") %>% head(5)
# A tibble: 5 × 2
`179` horsebean
<dbl> <chr>
1 160 horsebean
2 136 horsebean
3 227 horsebean
4 217 horsebean
5 168 horsebean
好了经过小师妹的详细讲解,小伙伴们对生信数据的 Excel 文件处理是不是更加得心应手了呢,大家记得动手操作哦。那今天小师妹的分享就到这里啦,小伙伴们再会。