Chapter 7 Tibbles with tibble

Creating Tibbles with as_tibble()

library(tidyverse)
package <U+393C><U+3E31>tidyverse<U+393C><U+3E32> was built under R version 3.3.3Loading tidyverse: ggplot2
Loading tidyverse: tibble
Loading tidyverse: tidyr
Loading tidyverse: readr
Loading tidyverse: purrr
Loading tidyverse: dplyr
Conflicts with tidy packages ---------------------------------------------------------------------------------------
filter(): dplyr, stats
lag():    dplyr, stats
as_tibble(iris)

You can also create a tibble from individual vectors with tibble() command. Tibble() will automatically recylce inputs of length 1, and allows you to refer to variables that you just created:

library(tidyverse)
tibble(
  x = 1:5,
  y = 1,
  z = x^2+y
)
Tibble() never changes the type of the inputs (it never conerts strings to factors)
It never changes the names of variables
It never creates row names

It’s possible for a tibble to have column names that are not valid R variable names, nonsyntaticn names. To refere to these variables, you need to surround them with backticks, `

tibble(
  `:)` = "smile",
  ` ` = "space",
  `2000`= "number"
)

Another way to create a tibble is with tribble(). this is short for transposed tibble. Tribble() is customized for data entry in code: column headings are defined by formulas (they start with ~) and entries are separated by commas.

tribble(
  ~x,~y,~z,
  #--/--/----
  "a",2,3.6,
  "b",1,8.5
)

Tibbles versus data.frame

Tibbles shows only the first 10 rows, and all the columns that fit on screen. This makes it much easier to work with large data. In addition to its name, each column reports its type, a nice feature borrowed from str():

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)
)

Options for printing

You can explicitly print() the data frame and control the number of rows (n) and hte width of the display. width = Inf will display all columns.

You can also control the default print behavior by setting options :
options(tibble.print_max =n, tibble.print_min = m)
options(dplyr.print_min = Inf) to always show all rows
options(tibble.width = Inf) to always print all columns, regardless of the width of the screen.

One final options is to use R’s view() to get a scrollable view of the comlet dataset. This is also often useful at the end of a long chain of manipulations.

nycflights13::flights %>%
  View()

Subsetting

If you want to pull a single variable, you need some new tools, $ [[.

[[ can extract by name or position,
$ only extracts by name

df <-  tibble(
  x = runif(5),
  y = rnorm(5)
  
)
df$x
[1] 0.2280880 0.5147675 0.2624617 0.7977038 0.2094997
df[["x"]]
[1] 0.2280880 0.5147675 0.2624617 0.7977038 0.2094997
df[[1]]
[1] 0.2280880 0.5147675 0.2624617 0.7977038 0.2094997
To use these in a pipe, you’ll need to use the special placeholder .

df %>% .$x
[1] 0.2280880 0.5147675 0.2624617 0.7977038 0.2094997
df %>% .[["x"]]
[1] 0.2280880 0.5147675 0.2624617 0.7977038 0.2094997

Interacting with older code

some older functions don’t work with tibbles. If you encouter one of these functions, use as.data.frame() to turn a tibble back to a data.frame.

class(as.data.frame(df))
[1] "data.frame"
LS0tDQp0aXRsZTogIlIgZm9yIERhdGEgU2NpZW5jZSBDaGFwdGVyIDciDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KPGgxPiBDaGFwdGVyIDcgVGliYmxlcyB3aXRoIHRpYmJsZSA8L2gxPg0KPGgyPiBDcmVhdGluZyBUaWJibGVzIHdpdGggYXNfdGliYmxlKCkgPC9oMj4NCmBgYHtyfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQphc190aWJibGUoaXJpcykNCmBgYA0KDQpZb3UgY2FuIGFsc28gY3JlYXRlIGEgdGliYmxlIGZyb20gaW5kaXZpZHVhbCB2ZWN0b3JzIHdpdGggdGliYmxlKCkgY29tbWFuZC4gVGliYmxlKCkgd2lsbCBhdXRvbWF0aWNhbGx5IHJlY3lsY2UgaW5wdXRzIG9mIGxlbmd0aCAxLCBhbmQgYWxsb3dzIHlvdSB0byByZWZlciB0byB2YXJpYWJsZXMgdGhhdCB5b3UganVzdCBjcmVhdGVkOg0KYGBge3J9DQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCnRpYmJsZSgNCiAgeCA9IDE6NSwNCiAgeSA9IDEsDQogIHogPSB4XjIreQ0KKQ0KYGBgDQpUaWJibGUoKSBuZXZlciBjaGFuZ2VzIHRoZSB0eXBlIG9mIHRoZSBpbnB1dHMgKGl0IG5ldmVyIGNvbmVydHMgc3RyaW5ncyB0byBmYWN0b3JzKTwvYnI+DQpJdCBuZXZlciBjaGFuZ2VzIHRoZSBuYW1lcyBvZiB2YXJpYWJsZXMgPC9icj4NCkl0IG5ldmVyIGNyZWF0ZXMgcm93IG5hbWVzIDwvcD4NCg0KSXQncyBwb3NzaWJsZSBmb3IgYSB0aWJibGUgdG8gaGF2ZSBjb2x1bW4gbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIFIgdmFyaWFibGUgbmFtZXMsIG5vbnN5bnRhdGljbiBuYW1lcy4gVG8gcmVmZXJlIHRvIHRoZXNlIHZhcmlhYmxlcywgeW91IG5lZWQgdG8gc3Vycm91bmQgdGhlbSB3aXRoIGJhY2t0aWNrcywgYA0KDQpgYGB7cn0NCnRpYmJsZSgNCiAgYDopYCA9ICJzbWlsZSIsDQogIGAgYCA9ICJzcGFjZSIsDQogIGAyMDAwYD0gIm51bWJlciINCikNCmBgYA0KDQpBbm90aGVyIHdheSB0byBjcmVhdGUgYSB0aWJibGUgaXMgd2l0aCB0cmliYmxlKCkuIHRoaXMgaXMgc2hvcnQgZm9yIHRyYW5zcG9zZWQgdGliYmxlLiBUcmliYmxlKCkgaXMgY3VzdG9taXplZCBmb3IgZGF0YSBlbnRyeSBpbiBjb2RlOiBjb2x1bW4gaGVhZGluZ3MgYXJlIGRlZmluZWQgYnkgZm9ybXVsYXMgKHRoZXkgc3RhcnQgd2l0aCB+KSBhbmQgZW50cmllcyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcy4NCg0KYGBge3J9DQp0cmliYmxlKA0KICB+eCx+eSx+eiwNCiAgIy0tLy0tLy0tLS0NCg0KICAiYSIsMiwzLjYsDQogICJiIiwxLDguNQ0KKQ0KYGBgDQoNCjxoMj4gVGliYmxlcyB2ZXJzdXMgZGF0YS5mcmFtZSA8L2gyPg0KVGliYmxlcyBzaG93cyBvbmx5IHRoZSBmaXJzdCAxMCByb3dzLCBhbmQgYWxsIHRoZSBjb2x1bW5zIHRoYXQgZml0IG9uIHNjcmVlbi4gVGhpcyBtYWtlcyBpdCBtdWNoIGVhc2llciB0byB3b3JrIHdpdGggbGFyZ2UgZGF0YS4gSW4gYWRkaXRpb24gdG8gaXRzIG5hbWUsIGVhY2ggY29sdW1uIHJlcG9ydHMgaXRzIHR5cGUsIGEgbmljZSBmZWF0dXJlIGJvcnJvd2VkIGZyb20gc3RyKCk6DQoNCmBgYHtyfQ0KdGliYmxlKA0KICBhID0gbHVicmlkYXRlOjpub3coKSArIHJ1bmlmKDFlMykgKiA4NjQwMCwNCiAgYiA9IGx1YnJpZGF0ZTo6dG9kYXkoKSArIHJ1bmlmKDFlMykgKiAzMCwgDQogIGMgPSAxOjFlMywNCiAgZCA9IHJ1bmlmKDFlMyksDQogIGUgPSBzYW1wbGUobGV0dGVycywgMWUzLCByZXBsYWNlID0gVFJVRSkNCikNCg0KYGBgDQoNCg0KPGgyPiBPcHRpb25zIGZvciBwcmludGluZyA8L2gyPg0KWW91IGNhbiBleHBsaWNpdGx5IHByaW50KCkgdGhlIGRhdGEgZnJhbWUgYW5kIGNvbnRyb2wgdGhlIG51bWJlciBvZiByb3dzIChuKSBhbmQgaHRlIHdpZHRoIG9mIHRoZSBkaXNwbGF5LiB3aWR0aCA9IEluZiB3aWxsIGRpc3BsYXkgYWxsIGNvbHVtbnMuIDwvcD4NCg0KWW91IGNhbiBhbHNvIGNvbnRyb2wgdGhlIGRlZmF1bHQgcHJpbnQgYmVoYXZpb3IgYnkgc2V0dGluZyBvcHRpb25zIDogPC9icj4NCm9wdGlvbnModGliYmxlLnByaW50X21heCA9biwgdGliYmxlLnByaW50X21pbiA9IG0pIDwvYnI+DQpvcHRpb25zKGRwbHlyLnByaW50X21pbiA9IEluZikgdG8gYWx3YXlzIHNob3cgYWxsIHJvd3MgPC9icj4NCm9wdGlvbnModGliYmxlLndpZHRoID0gSW5mKSB0byBhbHdheXMgcHJpbnQgYWxsIGNvbHVtbnMsIHJlZ2FyZGxlc3Mgb2YgdGhlIHdpZHRoIG9mIHRoZSBzY3JlZW4uPC9wPg0KDQpPbmUgZmluYWwgb3B0aW9ucyBpcyB0byB1c2UgUidzIHZpZXcoKSB0byBnZXQgYSBzY3JvbGxhYmxlIHZpZXcgb2YgdGhlIGNvbWxldCBkYXRhc2V0LiBUaGlzIGlzIGFsc28gb2Z0ZW4gdXNlZnVsIGF0IHRoZSBlbmQgb2YgYSBsb25nIGNoYWluIG9mIG1hbmlwdWxhdGlvbnMuDQoNCg0KYGBge3J9DQpueWNmbGlnaHRzMTM6OmZsaWdodHMgJT4lDQogIFZpZXcoKQ0KYGBgDQoNCjxoMj4gU3Vic2V0dGluZyA8L2gyPg0KDQpJZiB5b3Ugd2FudCB0byBwdWxsIGEgc2luZ2xlIHZhcmlhYmxlLCB5b3UgbmVlZCBzb21lIG5ldyB0b29scywgJCBbWy48L3A+DQoNCltbIGNhbiBleHRyYWN0IGJ5IG5hbWUgb3IgcG9zaXRpb24sIDwvYnI+DQokIG9ubHkgZXh0cmFjdHMgYnkgbmFtZSA8L2JyPg0KDQoNCmBgYHtyfQ0KZGYgPC0gIHRpYmJsZSgNCiAgeCA9IHJ1bmlmKDUpLA0KICB5ID0gcm5vcm0oNSkNCiAgDQopDQoNCmRmJHgNCg0KDQpgYGANCg0KDQpgYGB7cn0NCmRmW1sieCJdXQ0KYGBgDQoNCmBgYHtyfQ0KZGZbWzFdXQ0KYGBgDQoNClRvIHVzZSB0aGVzZSBpbiBhIHBpcGUsIHlvdSdsbCBuZWVkIHRvIHVzZSB0aGUgc3BlY2lhbCBwbGFjZWhvbGRlciAuIDwvcD4NCg0KYGBge3J9DQpkZiAlPiUgLiR4DQoNCmBgYA0KDQpgYGB7cn0NCmRmICU+JSAuW1sieCJdXQ0KYGBgDQoNCjxoMj4gSW50ZXJhY3Rpbmcgd2l0aCBvbGRlciBjb2RlIDwvaDI+DQoNCnNvbWUgb2xkZXIgZnVuY3Rpb25zIGRvbid0IHdvcmsgd2l0aCB0aWJibGVzLiBJZiB5b3UgZW5jb3V0ZXIgb25lIG9mIHRoZXNlIGZ1bmN0aW9ucywgdXNlIGFzLmRhdGEuZnJhbWUoKSB0byB0dXJuIGEgdGliYmxlIGJhY2sgdG8gYSBkYXRhLmZyYW1lLg0KDQpgYGB7cn0NCmNsYXNzKGFzLmRhdGEuZnJhbWUoZGYpKQ0KYGBgDQoNCg==