R数据科学整洁之道:使用 tibble 实现简单数据框

既生 data.frame,何生 tibble?

tibble 是一种简单数据框,它对传统数据框的功能进行了一些修改,其所提供的简单数据框更易于在 tidyverse 中使用。

多数情况下,我们会交替使用 tibble 和数据框这两个术语。

安装

tibble 包是 tidyverse 的核心包之一,因此安装 tidyverse 就可以了。

install.packages('tidyverse')

创建 tibble

因为 tibble 是 tidyverse 的标准功能之一,所以 tidyverse 中几乎所有函数都可以创建 tibble。

tidyverse 中许多函数都可以创建 tibble,因为 tibble 是 tidyverse 的标准功能之一。

可以通过 tibble() 函数使用一个向量来创建新 tibble。tibble() 会自动重复长度为 1 的输 入,并可以使用刚刚创建的新变量,如下所示:

library(tidyverse)

tibble(
 x = 1:5,
 y = 1,
 z = x ^ 2 + y
)
## # A tibble: 5 × 3
##       x     y     z
##   <int> <dbl> <dbl>
## 1     1     1     2
## 2     2     1     5
## 3     3     1    10
## 4     4     1    17
## 5     5     1    26

tibble() 函数比data.frame() 函数功能要少得多:它不能改变输入的类型(例如,不能将字符串转换为因子)、变量的名称,也不能创建行名称。

可以在 tibble 中使用在 R 中无效的变量名称(即不符合语法的名称)作为列名称。例如, 列名称可以不以字母开头,也可以包含特殊字符(如空格)。要想引用这样的变量,需要 使用反引号 ` 将它们括起来:

tb <- tibble(
 `:)` = "smile",
 ` ` = "space",
 `2000` = "number"
)
tb
## # A tibble: 1 × 3
##   `:)`  ` `   `2000`
##   <chr> <chr> <chr> 
## 1 smile space number

当然,如果要在 ggplot2 和 dplyr 等其他 R 包中使用这些变量,也需要使用反引号。

创建 tibble 的另一种方法是使用 tribble() 函数,tribble 是 transposed tibble(转置 tibble) 的缩写。tribble() 是定制化的,可以对数据按行进行编码:列标题由公式(以 ~ 开头) 定义,数据条目以逗号分隔,这样就可以用易读的方式对少量数据进行布局:

tribble(
 ~x, ~y, ~z,
 #--|--|----
 "a", 2, 3.6,
 "b", 1, 8.5
 )
## # A tibble: 2 × 3
##   x         y     z
##   <chr> <dbl> <dbl>
## 1 a         2   3.6
## 2 b         1   8.5

tibble 与 data.frame 互换

数据框转换为 tibble:

tb <- as_tibble(iris)
class(tb)
## [1] "tbl_df"     "tbl"        "data.frame"

tibble 转换为数据框:

df <- as.data.frame(tb)
class(df)
## [1] "data.frame"

与 data.frame 比较

tibble 和传统 data.frame 的使用方法主要有两处不同:打印和取子集。

打印

tibble 的打印方法进行了优化,只显示前 10 行结果,并且列也是适合屏幕的,这种方式非 常适合大数据集。除了打印列名,tibble 还会打印出列的类型,这项非常棒的功能借鉴于 str() 函数。

tb
## # A tibble: 150 × 5
##    Sepal.Length Sepal.Width Petal.Length Petal.Width Species
##           <dbl>       <dbl>        <dbl>       <dbl> <fct>  
##  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 
## # … with 140 more rows

取子集

有两个工具可以提取数据框的单个变量:

  • $,只能按名称提取变量,但可以减少一些输入。

  • [[,可以按名称或位置提取变量。

df <- tibble(
 x = runif(5),
 y = rnorm(5) )

# 按名称提取
df$x
## [1] 0.8070801 0.1610041 0.3952444 0.1384965 0.5667709

df[['x']]
## [1] 0.8070801 0.1610041 0.3952444 0.1384965 0.5667709

# 按位置提取
df[[1]]
## [1] 0.8070801 0.1610041 0.3952444 0.1384965 0.5667709

要想在管道中使用这些提取操作,需要使用特殊的占位符 .

df %>% .$x
## [1] 0.8070801 0.1610041 0.3952444 0.1384965 0.5667709

df %>% .[['x']]
## [1] 0.8070801 0.1610041 0.3952444 0.1384965 0.5667709

与 data.frame 相比,tibble 更严格:它不能进行部分匹配,如果想要访问的列不存在,它会生成一条警告信息。

最后总结

tibble 相对于数据框来说,更简单,但更方便使用,两者的主要区别是:

  • tibble 不能创建行名。

  • tibble 不能改变输入的类型(例如,不能将字符串转换为因子)、变量的名称。

  • tibble 不能进行部分匹配,如果想要访问的列不存在,它会生成一条警告信息。

  • tibble 打印时更美观。

粉丝福利

学生信,计算机基础一定要好。毫不夸张地说,计算机基础决定了你能否入门,而生物学修养决定你能走多远。没有出发,如何走得远?

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值