Ha! Ok, this whole question is kinda suffering from moving target syndrome 
In any case, I'm not sure what you're looking for, but here's an attempt to have both by-Team and overall data for each variable. The key here is that you can preprocess your data outside your shiny app (static_table in my example below) and only filter it upon user interactions (better still, you could save your data before and only load it within your shiny session).
TestDT = data.table(
Team = c("Oregon", "Villanova", "Utah"),
"eFG%" = c(".5", ".6", ".4"),
"TOV%" = c(".3", ".1", ".6"),
ORBRate = c(".7", ".5", ".6"),
FTRate = c(".5", ".6", ".4")
)
static_table <-
left_join(
TestDT %>%
mutate(across(-Team, as.numeric)) %>%
pivot_longer(-Team, names_to = "question", values_to = "response") ,
TestDT %>%
mutate(across(-Team, ~mean(as.numeric(.x)))) %>%
pivot_longer(-Team, names_to = "question", values_to = "mean_response"),
by = c("Team", "question")
)
ui <- basicPage(
selectInput("Team", "Select Team",
c("Oregon", "Villanova", "Utah")),
plotOutput("teamPlot")
)
server <- function(input, output) {
output$teamPlot <- renderPlot({
static_table %>%
dplyr::filter(Team == input$Team) %>%
ggplot(.,aes(x=question,y=response)) + labs(title="Offensive Overview", x="Team", y="Four Factors") +
stat_summary(aes(y = mean_response), fun = "mean", geom = "point", shape=1, size=3, color="magenta", fill="magenta") +
geom_point()
})
}
shinyApp(ui,server)