学习《R for Data Science》(4)——Tibbles

王致远

2018/12/30

学习更多的tibble知识,vignette(“tibble”)

(除了打印好看点,好像没发现tibble多有用?)

library(tidyverse)
## Warning: 程辑包'tidyverse'是用R版本3.5.1 来建造的
## -- Attaching packages -------------------------------------------------------- tidyverse 1.2.1 --
## √ ggplot2 2.2.1     √ purrr   0.2.5
## √ tibble  1.4.2     √ dplyr   0.7.6
## √ tidyr   0.8.1     √ stringr 1.3.1
## √ readr   1.1.1     √ forcats 0.3.0
## Warning: 程辑包'tidyr'是用R版本3.5.1 来建造的
## Warning: 程辑包'readr'是用R版本3.5.1 来建造的
## Warning: 程辑包'forcats'是用R版本3.5.1 来建造的
## -- Conflicts ----------------------------------------------------------- tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()

创建Tibble

tidyverse包里所有的函数,创建的都是tibble;

如果要强制转换data.frame,使用

as_tibble(iris)
## # A tibble: 150 x 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

也可以使用tibble()来创建

tibble(
  x = 1:5, 
  y = 1, 
  z = x ^ 2 + y
)
## # A tibble: 5 x 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的异同

打印

在打印大数据时,不会overwhelm your console

构造子集

df <- tibble(
  x = runif(5),
  y = rnorm(5)
)
df$x
## [1] 0.5652198 0.3483937 0.4660307 0.4830957 0.9444043
df[["x"]]
## [1] 0.5652198 0.3483937 0.4660307 0.4830957 0.9444043
df[[1]]
## [1] 0.5652198 0.3483937 0.4660307 0.4830957 0.9444043

在pipe中应用时,前面需要有个句点

df %>% .$x
## [1] 0.5652198 0.3483937 0.4660307 0.4830957 0.9444043
df %>% .[["x"]]
## [1] 0.5652198 0.3483937 0.4660307 0.4830957 0.9444043

tibble在使用$引用子集时,不能使用部分匹配,必须全部匹配。

从tibble转回到data.frame

class(df)
## [1] "tbl_df"     "tbl"        "data.frame"
class(as.data.frame(df))
## [1] "data.frame"