264

tibble (previously tbl_df) is a version of a data frame created by the dplyr data frame manipulation package in R. It prevents long table outputs when accidentally calling the data frame.

Once a data frame has been wrapped by tibble/tbl_df, is there a command to view the whole data frame though (all the rows and columns of the data frame)?

If I use df[1:100,], I will see all 100 rows, but if I use df[1:101,], it will only display the first 10 rows. I would like to easily display all the rows to quickly scroll through them.

Is there either a dplyr command to counteract this or a way to unwrap the data frame?

Jonathan Callen
  • 11,301
  • 2
  • 23
  • 44
Zhe Zhang
  • 2,879
  • 2
  • 14
  • 12

7 Answers7

312

You could also use

print(tbl_df(df), n=40)

or with the help of the pipe operator

df %>% tbl_df %>% print(n=40)

To print all rows specify tbl_df %>% print(n = Inf)

edit 31.07.2021: in > dplyr 1.0.0

Warning message:
`tbl_df()` was deprecated in dplyr 1.0.0.
Please use `tibble::as_tibble()` instead.

df %>% as_tibble() %>% print(n=40)

TarJae
  • 72,363
  • 6
  • 19
  • 66
Tim
  • 3,296
  • 1
  • 13
  • 7
  • 38
    if you want don't want to worry about the value of `n` and you're already piping, you can use `df %>% tbl_df %>% print(n = nrow(.))` – ClaytonJY Aug 03 '16 at 15:57
  • 22
    Extending @BLT's answer, you can set `n = Inf` to print all rows. – seasmith Feb 02 '17 at 21:38
  • 11
    `print` (with a tibble) also has the `width = ` and `n_extra = ` options to control how many columns are printed, either directly or indirectly. – Zhe Zhang May 17 '17 at 16:57
  • 3
    @ClaytonJY I've also found `tbl_df %>% print(n = Inf)` to work for this. – Dannid Nov 21 '18 at 19:44
  • does anybody know why`print(n = ...)` turns on scientific notation in the tibble display? – Agile Bean Aug 01 '19 at 09:53
  • bear in mind that if you choose to do `print(n=nrow(.))`, you need to have an object in hand first; if you are retrieving data from remote data source (e.g. a database connection), you'll have to do `df <- tbl(conn, "db_name"); df %>% print(n=nrow(.))`. – stucash Jul 29 '21 at 13:57
102

You can use as.data.frame or print.data.frame.

If you want this to be the default, you can change the value of the dplyr.print_max option.

options(dplyr.print_max = 1e9)
Vincent Zoonekynd
  • 31,893
  • 5
  • 69
  • 78
85

The tibble vignette has an updated way to change its default printing behavior:

You can control the default appearance with options:

options(pillar.print_max = n, pillar.print_min = m): if there are more than n rows, print only the first m rows. Use options(pillar.print_max = Inf) to always show all rows.

options(pillar.width = n): use n character slots horizontally to show the data. If n > getOption("width"), this will result in multiple tiers. Use options(pillar.width = Inf) to always print all columns, regardless of the width of the screen.

examples

This will always print all rows:

options(pillar.print_max = Inf)

This will not actually limit the printing to 50 lines:

options(pillar.print_max = 50)

But this will restrict printing to 50 lines:

options(pillar.print_max = 50, pillar.print_min = 50)
BLT
  • 2,492
  • 1
  • 24
  • 33
  • 2
    This will change the default behavior for all tibbles. I was looking for a way to override the default constraint. `print(n=100)` appears to do what I want. (Summary tables from `count()`, for example, should display in their entirety, whereas I do want my data tables to be truncated.) – Dannid Oct 30 '18 at 20:49
  • 2
    @dannid looks like you want the accepted answer, then. – BLT Oct 31 '18 at 03:54
  • 1
    "As of tibble 3.1.0, printing is handled entirely by the pillar package." (From the "Printing tibbles" help file.) To control the default appearance with options you can use: `options(pillar.print_max = n, pillar.print_min = m)`. – petzi Dec 16 '21 at 11:26
  • 1
    @petzi amazing, thanks for flagging. I believe I've updated it to reflect the latest in the tibble vignette. – BLT Dec 17 '21 at 18:22
8

As detailed out in the bookdown documentation, you could also use a paged table

mtcars %>% tbl_df %>% rmarkdown::paged_table()

This will paginate the data and allows to browse all rows and columns (unless configured to cap the rows). Example:

enter image description here

Holger Brandl
  • 10,634
  • 3
  • 64
  • 63
  • 2
    As described in that documentation: If the paged table is generated by a code chunk in an R Notebook, you can add the parameter `rows.print=[n]` to the chunk options to control the number of rows displayed per page. – Arthur Small Sep 18 '19 at 17:00
  • This is great for `html` output, but obviously won't work for `pdf`. – PatrickT Feb 10 '22 at 07:24
2

I prefer to turn the tibble to data.frame. It shows everything and you're done

df %>% data.frame 
Lefty
  • 368
  • 4
  • 11
2

you can print it in Rstudio with View() more convenient:

df %>% View()

View(df)
Mark Rotteveel
  • 100,966
  • 191
  • 140
  • 197
0

If you want to use pipes and find yourself wanting to see the whole tibble a lot, here's a solution with a function showAll():

showAll<-function(tbl_df){
  print(tbl_df,n=nrow(tbl_df))
}

require(tibble)
#Truncated tibble (default)
mtcars %>% as_tibble()

#Full size tibble
mtcars %>% as_tibble() %>% showAll()
mattador
  • 421
  • 4
  • 12
  • The really useful nugget in the center of that is the n argument to the print function. – Chris Feb 11 '22 at 19:12