R for Data Science总结之——tibble

R中传统的data.frame是很老的数据结构,而在新的tidyverse框架中提出了新的tibble来替代一些老的行为模式:

library(tidyverse)

将老式数据框转换成tibble:

as_tibble(iris)
#> # A tibble: 150 x 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 
#> # ... with 144 more rows

用向量创建tibble:

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

和data.frame()不同的是,tibble()更加懒惰,不会将string类型的数据转换成factor:

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

另外也可以用tribble()创建tibble, t表示的是transposed转置:

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

tibble vs data.frame

tibble只显示数据集的前十行:

tibble(
  a = lubridate::now() + runif(1e3) * 86400,
  b = lubridate::today() + runif(1e3) * 30,
  c = 1:1e3,
  d = runif(1e3),
  e = sample(letters, 1e3, replace = TRUE)
)
#> # A tibble: 1,000 x 5
#>   a                   b              c     d e    
#>                        
#> 1 2018-08-24 18:13:19 2018-08-31     1 0.368 h    
#> 2 2018-08-25 12:18:28 2018-09-05     2 0.612 n    
#> 3 2018-08-25 06:42:07 2018-09-15     3 0.415 l    
#> 4 2018-08-24 20:03:25 2018-09-14     4 0.212 x    
#> 5 2018-08-24 16:27:41 2018-09-11     5 0.733 a    
#> 6 2018-08-25 03:28:38 2018-09-07     6 0.460 v    
#> # ... with 994 more rows

如果想调整这个特性可以设置:

nycflights13::flights %>% 
  print(n = 10, width = Inf)
options(tibble.print_max = n, tibble.print_min = m)
options(tibble.print_min = Inf)
options(tibble.width = Inf)
nycflights13::flights %>% 
  View()

子集

tibble挑选子集有$和[[两种方式:

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

# Extract by name
df$x
#> [1] 0.434 0.395 0.548 0.762 0.254
df[["x"]]
#> [1] 0.434 0.395 0.548 0.762 0.254

# Extract by position
df[[1]]
#> [1] 0.434 0.395 0.548 0.762 0.254

若想在pipes中使用可以用.占位符:

df %>% .$x
#> [1] 0.434 0.395 0.548 0.762 0.254
df %>% .[["x"]]
#> [1] 0.434 0.395 0.548 0.762 0.254

若要调用一些老的使用data.frame的包,需要将tibble转换成data.frame:

class(as.data.frame(tb))
#> [1] "data.frame"

本文代码已上传GITHUB点此进入

你可能感兴趣的:(R,Data,Science)