《R数据科学实战:工具详解与案例分析 》 —2.2 tibble包—数据集准备
2.2 tibble包—数据集准备
解决问题需要首先了解问题所在,对症下药。tibble包的存在就是为了给数据清理及后续的分析提供一个最佳的起点。tibble既是R包的名字也是数据在R中的一种存储格式。可以将tibble包理解为R中最常见的data.frame(数据框)格式的升级版。像下列代码所示,如果使用read.csv读取数据,那么数据会被存储在data.frame(数据框)格式中。但是当调用read_csv时,数据就会存在三种适用格式:tbl_df、tbl和data.frame。因为tibble和readr包都源自于Hadley的tidy系列,所以使用readr包时自动植入了tibble(以下简称tbl)的数据格式。那么,问题来了,为什么非要使用这个格式呢?
> iris <- read.csv("./RawData/iris.csv",stringsAsFactors = F)
> class(iris)
## [1] "data.frame"
> iris <- read_csv("./RawData/iris.csv")
> class(iris)
## [1] "tbl_df" "tbl" "data.frame"
2.2.1 为什么使用tibble
tbl格式作为老旧的data.frame升级版,主要包含如下三点优势。
1)稳定性更好,可完整保存变量名称及属性。
2)更多的信息展示、警示提醒,有利于及时发现错误。
3)新的输出方式使得浏览数据时,屏幕的利用率极佳。
因为R语言已经诞生了将近20年,很多早期的函数都是围绕data.frame格式写就的,当调用这类函数时,“新兴”的tbl格式可能会出现不兼容的情况,这也是tbl格式目前被发现的唯一缺陷。
tbl格式的第一条优势需要读者在使用过程中对比两种格式的差异才会有直观感受,简单来讲就是,传统的data.frame在处理变量名称时,有时会悄悄改动名称以满足自身要求,这往往会给用户带来一些意料之外的错误。请看以下的例子。
> data.frame('x + y' = 1∶5)
> tibble('x + y' = 1∶5)
两行代码分别使用函数data.frame和tibble创建了一个传统的数据框格式(见表2-6),以及一个tbl格式的数据框(见表2-7)。代码中定义的数据变量名称为“x+y”,但在data.frame格式中被修改成了“x...y”。大部分情况下,这种默认的修改是数据框格式的一种自我保护机制,目的是为了后续计算时引用变量名不会产生歧义。但是这种保护机制同时会与编程数据分析的另一项基本原则发生冲突,即常量输入等于常量输出(这里的常量可以理解为变量名),除非用户主动修改,否则其名称应保持一致。至于如何选择,就需要读者自行决断了。
表2-6 传统数据框格式对变量名的处理
表2-7 tibble格式对变量名的处理
第1章中提到查看data.frame中的变量类型时,通常需要调用str函数。但是在tbl格式中,无须调用任何函数,直接输入数据集名称即可查看相关信息。默认情况下,tbl格式会根据console窗口的大小,自动调整显示的内容。内容会包含数据格式、列总数、行总数、变量名称和类型,以及无法完全展示部分的变量信息。有一定data.frame使用经验的读者肯定知道,对于不调用str函数直接在console中运行data.frame格式的数据集,R会将小于1000列×1000行的所有内容都显示出来,而且其中还不包括变量属性等信息。tbl格式查看数据集相关信息的示例代码如下:
> iris
# A tibble: 50 x 12
Sepal.L..Setosa Sepal.W..Setosa
<dbl> <dbl>
1 5.10 3.50
2 4.90 3.00
3 4.70 3.20
4 4.60 3.10
5 5.00 3.60
6 5.40 3.90
7 4.60 3.40
8 5.00 3.40
9 4.40 2.90
10 4.90 3.10
# ... with 40 more rows, and 10 more variables:
# Petal.L..Setosa <dbl>,
# Petal.W..Setosa <dbl>,
# Sepal.L..Versicolor <dbl>,
# Sepal.W..Versicolor <dbl>,
# Petal.L..Versicolor <dbl>,
# Petal.W..Versicolor <dbl>,
# Sepal.L..Virginica <dbl>,
# Sepal.W..Virginica <dbl>,
# Petal.L..Virginica <dbl>,
# Petal.W..Virginica <dbl>
- 点赞
- 收藏
- 关注作者
评论(0)