Exploring the gt() package

Cody Leporini

2022-04-20

The gt() package

This is a package is a powerful package that lets you make better formatted tables for visuals. it also lets you make better labels and colors to make it easier for you and others to see tables. It starts with tibbles and lets you transform it to gt tables.

This package can be used in a lot of ways. this is because a lot of fields need tables. Whether this be for stocks, medical, or the statistical field. A lot of people need to be able to see and comprehend tables and this package lets you make them more accessible.

One of the most used functions is pretty simple and it is the gt() function. This function is simple and it transforms the tibble into a gt table. It is demonstrated below.

data <- mtcars #read in the data
head(data) #look at the data
##                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
## Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1
data %<>% #fancy pipe
  mutate(car.name = row.names(data)) %>% #this lets us extract the car names
  relocate(car.name) #this lets us move the car names to the front

#now lets use the function and see the result

gt_tbl <- gt(data)

gt_tbl
car.name mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6
Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
#we can also pipe into the gt function like we do other functions

head(data) %>% 
  gt()
car.name mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
data %>%
  select(car.name, mpg, cyl, disp,hp) %>% # Select the variables we want to look at
  group_by(cyl) %>% # Lets group up the cars by the cylinder count
  arrange(desc(hp)) %>% #lets arrange them by highest to lowest horse power
  slice(1:5) %>% #lets only look at 5 cars
  gt() %>% #calling the gt function
  tab_header(title = "Simple Mt Car Data", # this lets us put a title in the table
             subtitle = "Looking at the Horse power certain cars make") %>% # Lets us also add a subtitle 
  cols_hide(hp) %>% # this lets us hide a column we dont want
  cols_unhide(hp)-> car1 #this lets us unhide a column we previously hid
car1 %>% # read in the last table we made 
  tab_source_note(source_note = "Mt Car data from Base R") %>% # This lets us add a foot note for the bottom of the table
  cols_label(car.name = "Car Model (grouped by cylinders)", # this lets us rename the column name, We can also use row_label 
             mpg = "Miles per Gallon", #expanding the name
             cyl = "Number of Cylinders", #expanding the name
             disp = "Displacement (Liters)",  #expanding the name
             hp = "HRSPRS") %>% # adding a little fun to the names
  cols_align(align = "center") %>%  #this lines the columns up to the center of their cell
  opt_align_table_header(align = "left") %>% # this lets us line the header to the right, I think it looks more professional
  opt_table_font(font = c(google_font(name = "Cinzel"), #this lets us add a font from google fonts, I liked the Cinzel font
                          default_fonts() #this includes all the default google fonts
                          )) %>% 
  tab_style( #this function lets us change the style of certain cells
     locations = cells_column_labels(columns = everything()), #selecting column labels, and then all of the columns
     style     = list( #making a list of the style changes we want
       #Give a thick border below
       cell_borders(sides = "bottom", weight = px(3)),
       #Make text bold
       cell_text(weight = "bold", 
                 size = 15)
     ) )%>% 
  tab_style(locations = cells_title(groups = "title"),  #making another style for the title
            style = list(
              cell_text(weight = "bold" , 
                        size = 20)
            )) %>% 
  cols_width(c(mpg,cyl, disp, hp) ~ px(150)) -> car2 #changing the size of the columns noted, and then saving it to add more later
car2 %>%  # reading in the last table
  tab_style( #making a new style for the borders
    style = list( 
      cell_borders(   #Selecting the cell borders
        sides = "right",  #selecting the right sides 
        color = "grey", #picking the color or the border
        weight = px(2), #selecting the size of the border
        style = "dotted" #selecting the style of the line
      )
    ),
    locations = list( # telling the package which cells
      cells_body( #leaving it blank also selects all
      )
    )
  ) %>% 
  tab_style( #making a style for the row groups
    locations = list( #making a list of which groups
      cells_row_groups() #selecting all the groups
    ),
    style = list( #style selections
              cell_text(weight = "bold" , # telling the package to only change the text
                        size = 20)  
    )
  ) %>% 
  tab_style( #making a new style for the max horse power
    style = list(
      cell_fill(color = "green") #making the color green for good
    ), 
    locations = cells_body( #this focuses on the body of the cells
      columns = hp, # only applying  this to the hp column
      rows = hp==max(hp) #only applying this to the max of this column
    )
  ) %>% 
  tab_style(  #making a new style for min hp 
    style = list( #listing the style options
      cell_fill(color = "red") # making the color red
    ), 
    locations = 
    cells_body( #applying this to the cell body
      columns = hp,# picking only the hp column
      rows = hp==min(hp) #getting the minimum hp and selecting that value
    ))
Simple Mt Car Data
Looking at the Horse power certain cars make
Car Model (grouped by cylinders) Miles per Gallon Displacement (Liters) HRSPRS
4
Lotus Europa 30.4 95.1 113
Volvo 142E 21.4 121.0 109
Toyota Corona 21.5 120.1 97
Merc 230 22.8 140.8 95
Datsun 710 22.8 108.0 93
6
Ferrari Dino 19.7 145.0 175
Merc 280 19.2 167.6 123
Merc 280C 17.8 167.6 123
Mazda RX4 21.0 160.0 110
Mazda RX4 Wag 21.0 160.0 110
8
Maserati Bora 15.0 301.0 335
Ford Pantera L 15.8 351.0 264
Duster 360 14.3 360.0 245
Camaro Z28 13.3 350.0 245
Chrysler Imperial 14.7 440.0 230
Mt Car data from Base R

And we can see the pretty table that we made. there are more things that we can do to the table but they are a little more in depth. I felt like when i was working on this package there was a lot more i could be doing but it felt pretty similar to ggplot. I hope you guys found it useful and might use it in the future.

https://gt.rstudio.com/ https://gt.rstudio.com/reference/tab_header.html https://gt.rstudio.com/reference/tab_style.html https://gt.rstudio.com/reference/cells_body.html https://gt.rstudio.com/reference/tab_row_group.html