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