Summary by Position (Sorted by Average FG%)
Position Minimum Average Maximum Count
Forward 50.9 54.25 59.1 4
Guard 46.6 52.90 58.0 4
Center 40.8 50.85 59.9 4

Code:

# Installing and loading required packages
if (!require("tidyverse"))
  install.packages("tidyverse")
if (!require("gtExtras"))
  install.packages("gtExtras")

library(tidyverse)
library(gtExtras)

# Specify made-up data for 12 players and turn it into a data frame
Player <- c(
  "Player 1",
  "Player 2",
  "Player 3",
  "Player 4",
  "Player 5",
  "Player 6",
  "Player 7",
  "Player 8",
  "Player 9",
  "Player 10",
  "Player 11",
  "Player 12"
)

Position <- c(
  "Guard",
  "Center",
  "Center",
  "Guard",
  "Forward",
  "Center",
  "Forward",
  "Guard",
  "Center",
  "Forward",
  "Guard",
  "Forward"
)

FG_Percentage <- c(58.0,
                   44.9,
                   40.8,
                   46.6,
                   59.1,
                   57.8,
                   53.9,
                   52.8,
                   59.9,
                   53.1,
                   54.2,
                   50.9)

basketball_players <- data.frame(Player, Position, FG_Percentage)

# Calculate the overall average FG percentage
FG_Average <- mean(FG_Percentage)

# Adding a new column for FG category based on average
basketball_players <- basketball_players %>%
  mutate(
    FG_Category = case_when(
      FG_Percentage < FG_Average ~ "Below average",
      FG_Percentage == FG_Average ~ "Average",
      FG_Percentage > FG_Average ~ "Above average",
      .default = "Error"
    )
  )

# Summarize data by position (including Min, Mean, Max FG_Percentage, and Count)
position_summary <- basketball_players %>%
  group_by(Position) %>%
  summarise(
    Minimum = min(FG_Percentage),
    Average = mean(FG_Percentage),
    Maximum = max(FG_Percentage),
    Count = n(),
    .groups = 'drop'
  )

# Sort the summarized data by Average in descending order
position_summary_sorted <- position_summary %>%
  arrange(desc(Average))  # Sorting by the Average column in descending order

# Making the table for player-level data
Player_table <- gt(basketball_players) %>%
  tab_header("Player positions and FG stats") %>%
  cols_align(align = "left") %>%
  gt_theme_538

# Showing the player-level table
Player_table

# Making the table for sorted summarized data by position with Min, Mean, Max
Position_summary_table <- gt(position_summary_sorted) %>%
  tab_header("Summary by Position (Sorted by Average FG%)") %>%
  cols_align(align = "left") %>%
  gt_theme_538

# Showing the sorted summarized table
Position_summary_table