Home > OS >  Can data.table output be made to look more like tibble output? (10 rows, print only columns that fit
Can data.table output be made to look more like tibble output? (10 rows, print only columns that fit

Time:05-01

Is it possible to change the settings in data.table so the default is to print only 10 rows and only the columns that fit the screen? Like a tibble df does.

I usually work on a laptop and would like to avoid the output in the example below. Many thanks!

library(data.table)
dt_table <- as.data.table(mtcars)
dt_table 

Output:


dt_table
     mpg cyl  disp  hp drat    wt  qsec vs am gear
 1: 21.0   6 160.0 110 3.90 2.620 16.46  0  1    4
 2: 21.0   6 160.0 110 3.90 2.875 17.02  0  1    4
 3: 22.8   4 108.0  93 3.85 2.320 18.61  1  1    4
 4: 21.4   6 258.0 110 3.08 3.215 19.44  1  0    3
 5: 18.7   8 360.0 175 3.15 3.440 17.02  0  0    3
 6: 18.1   6 225.0 105 2.76 3.460 20.22  1  0    3
 7: 14.3   8 360.0 245 3.21 3.570 15.84  0  0    3
 8: 24.4   4 146.7  62 3.69 3.190 20.00  1  0    4
 9: 22.8   4 140.8  95 3.92 3.150 22.90  1  0    4
10: 19.2   6 167.6 123 3.92 3.440 18.30  1  0    4
11: 17.8   6 167.6 123 3.92 3.440 18.90  1  0    4
12: 16.4   8 275.8 180 3.07 4.070 17.40  0  0    3
13: 17.3   8 275.8 180 3.07 3.730 17.60  0  0    3
14: 15.2   8 275.8 180 3.07 3.780 18.00  0  0    3
15: 10.4   8 472.0 205 2.93 5.250 17.98  0  0    3
16: 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3
17: 14.7   8 440.0 230 3.23 5.345 17.42  0  0    3
18: 32.4   4  78.7  66 4.08 2.200 19.47  1  1    4
19: 30.4   4  75.7  52 4.93 1.615 18.52  1  1    4
20: 33.9   4  71.1  65 4.22 1.835 19.90  1  1    4
21: 21.5   4 120.1  97 3.70 2.465 20.01  1  0    3
22: 15.5   8 318.0 150 2.76 3.520 16.87  0  0    3
23: 15.2   8 304.0 150 3.15 3.435 17.30  0  0    3
24: 13.3   8 350.0 245 3.73 3.840 15.41  0  0    3
25: 19.2   8 400.0 175 3.08 3.845 17.05  0  0    3
26: 27.3   4  79.0  66 4.08 1.935 18.90  1  1    4
27: 26.0   4 120.3  91 4.43 2.140 16.70  0  1    5
28: 30.4   4  95.1 113 3.77 1.513 16.90  1  1    5
29: 15.8   8 351.0 264 4.22 3.170 14.50  0  1    5
30: 19.7   6 145.0 175 3.62 2.770 15.50  0  1    5
31: 15.0   8 301.0 335 3.54 3.570 14.60  0  1    5
32: 21.4   4 121.0 109 4.11 2.780 18.60  1  1    4


EDIT:

I found a partial solution:


options(datatable.print.nrows=5,
        datatable.print.trunc.cols = T)

Which works for me. I anyone knows how to control how many n top / bottom rows separately? The option above will print 5 top / 5 bottom rows -- what if I want top 10, bottom 2? Is that possible?

CodePudding user response:

Starting with:

> nycflights13::flights
# A tibble: 336,776 x 19
    year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time arr_delay
   <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>     <dbl>
 1  2013     1     1      517            515         2      830            819        11
 2  2013     1     1      533            529         4      850            830        20
 3  2013     1     1      542            540         2      923            850        33
 4  2013     1     1      544            545        -1     1004           1022       -18
 5  2013     1     1      554            600        -6      812            837       -25
 6  2013     1     1      554            558        -4      740            728        12
 7  2013     1     1      555            600        -5      913            854        19
 8  2013     1     1      557            600        -3      709            723       -14
 9  2013     1     1      557            600        -3      838            846        -8
10  2013     1     1      558            600        -2      753            745         8
# ... with 336,766 more rows, and 10 more variables: carrier <chr>, flight <int>,
#   tailnum <chr>, origin <chr>, dest <chr>, air_time <dbl>, distance <dbl>, hour <dbl>,
#   minute <dbl>, time_hour <dttm>
> as.data.table(nycflights13::flights)
        year month day dep_time sched_dep_time dep_delay arr_time sched_arr_time
     1: 2013     1   1      517            515         2      830            819
     2: 2013     1   1      533            529         4      850            830
     3: 2013     1   1      542            540         2      923            850
     4: 2013     1   1      544            545        -1     1004           1022
     5: 2013     1   1      554            600        -6      812            837
    ---                                                                         
336772: 2013     9  30       NA           1455        NA       NA           1634
336773: 2013     9  30       NA           2200        NA       NA           2312
336774: 2013     9  30       NA           1210        NA       NA           1330
336775: 2013     9  30       NA           1159        NA       NA           1344
336776: 2013     9  30       NA            840        NA       NA           1020
        arr_delay carrier flight tailnum origin dest air_time distance hour minute
     1:        11      UA   1545  N14228    EWR  IAH      227     1400    5     15
     2:        20      UA   1714  N24211    LGA  IAH      227     1416    5     29
     3:        33      AA   1141  N619AA    JFK  MIA      160     1089    5     40
     4:       -18      B6    725  N804JB    JFK  BQN      183     1576    5     45
     5:       -25      DL    461  N668DN    LGA  ATL      116      762    6      0
    ---                                                                           
336772:        NA      9E   3393    <NA>    JFK  DCA       NA      213   14     55
336773:        NA      9E   3525    <NA>    LGA  SYR       NA      198   22      0
336774:        NA      MQ   3461  N535MQ    LGA  BNA       NA      764   12     10
336775:        NA      MQ   3572  N511MQ    LGA  CLE       NA      419   11     59
336776:        NA      MQ   3531  N839MQ    LGA  RDU       NA      431    8     40
                  time_hour
     1: 2013-01-01 05:00:00
     2: 2013-01-01 05:00:00
     3: 2013-01-01 05:00:00
     4: 2013-01-01 05:00:00
     5: 2013-01-01 06:00:00
    ---                    
336772: 2013-09-30 14:00:00
336773: 2013-09-30 22:00:00
336774: 2013-09-30 12:00:00
336775: 2013-09-30 11:00:00
336776: 2013-09-30 08:00:00

We can get most of the way there with:

> print(as.data.table(nycflights13::flights), nrows=5, topn=5, class=TRUE, trunc.cols=TRUE)
         year month   day dep_time sched_dep_time dep_delay arr_time
        <int> <int> <int>    <int>          <int>     <num>    <int>
     1:  2013     1     1      517            515         2      830
     2:  2013     1     1      533            529         4      850
     3:  2013     1     1      542            540         2      923
     4:  2013     1     1      544            545        -1     1004
     5:  2013     1     1      554            600        -6      812
    ---                                                             
336772:  2013     9    30       NA           1455        NA       NA
336773:  2013     9    30       NA           2200        NA       NA
336774:  2013     9    30       NA           1210        NA       NA
336775:  2013     9    30       NA           1159        NA       NA
336776:  2013     9    30       NA            840        NA       NA
12 variables not shown: [sched_arr_time <int>, arr_delay <num>, carrier <char>, flight <int>, tailnum <char>, origin <char>, dest <char>, air_time <num>, distance <num>, hour <num>, ...]

I don't know of a way to not show the bottom so-many-rows. That aside, fortunately we can set those as options, either per-session (as below on the R repl prompt) or in a .Rprofile file for persistent use.

options(datatable.print.nrows=5, datatable.print.topn=5, datatable.print.class=TRUE, datatable.print.trunc.cols=TRUE)
as.data.table(nycflights13::flights)
#          year month   day dep_time sched_dep_time dep_delay arr_time
#         <int> <int> <int>    <int>          <int>     <num>    <int>
#      1:  2013     1     1      517            515         2      830
#      2:  2013     1     1      533            529         4      850
#      3:  2013     1     1      542            540         2      923
#      4:  2013     1     1      544            545        -1     1004
#      5:  2013     1     1      554            600        -6      812
#     ---                                                             
# 336772:  2013     9    30       NA           1455        NA       NA
# 336773:  2013     9    30       NA           2200        NA       NA
# 336774:  2013     9    30       NA           1210        NA       NA
# 336775:  2013     9    30       NA           1159        NA       NA
# 336776:  2013     9    30       NA            840        NA       NA
# 12 variables not shown: [sched_arr_time <int>, arr_delay <num>, carrier <char>, flight <int>, tailnum <char>, origin <char>, dest <char>, air_time <num>, distance <num>, hour <num>, ...]

which is pretty close.

CodePudding user response:

We may use tidytable

tidytable::as_tidytable(dt_table) 

-output

# A tidytable: 32 × 11
     mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
 1  21       6  160    110  3.9   2.62  16.5     0     1     4     4
 2  21       6  160    110  3.9   2.88  17.0     0     1     4     4
 3  22.8     4  108     93  3.85  2.32  18.6     1     1     4     1
 4  21.4     6  258    110  3.08  3.22  19.4     1     0     3     1
 5  18.7     8  360    175  3.15  3.44  17.0     0     0     3     2
 6  18.1     6  225    105  2.76  3.46  20.2     1     0     3     1
 7  14.3     8  360    245  3.21  3.57  15.8     0     0     3     4
 8  24.4     4  147.    62  3.69  3.19  20       1     0     4     2
 9  22.8     4  141.    95  3.92  3.15  22.9     1     0     4     2
10  19.2     6  168.   123  3.92  3.44  18.3     1     0     4     4
# … with 22 more rows

which would also keep the data.table class

> str(tidytable::as_tidytable(dt_table) )
Classes ‘tidytable’, ‘data.table’ and 'data.frame': 32 obs. of  11 variables:
 $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
 $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
 $ disp: num  160 160 108 258 360 ...
 $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
 $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
 $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
 $ qsec: num  16.5 17 18.6 19.4 17 ...
 $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
 $ am  : num  1 1 1 0 0 0 0 0 0 0 ...
 $ gear: num  4 4 4 3 3 3 3 4 4 4 ...
 $ carb: num  4 4 1 1 2 1 4 2 2 4 ...
 - attr(*, ".internal.selfref")=<externalptr> 
  • Related