if ( ! require ( tidyverse ) ) { install.packages ( "tidyverse" ) ; library ( tidyverse ) }
if ( ! require ( patchwork ) ) { install.packages ( "patchwork" ) ; library ( patchwork ) }
if ( ! require ( reactable ) ) { install.packages ( "reactable" ) ; library ( reactable ) }
if ( ! require ( reactablefmtr ) ) { install.packages ( "reactablefmtr" ) ; library ( reactablefmtr ) }
if ( ! require ( countrycode ) ) { install.packages ( "countrycode" ) ; library ( countrycode ) }
if ( ! require ( htmltools ) ) { install.packages ( "htmltools" ) ; library ( htmltools ) }
euroleague_basketball <- readr :: read_csv ( 'https://raw.githubusercontent.com/rfordatascience/tidytuesday/main/data/2025/2025-10-07/euroleague_basketball.csv' )
master <- euroleague_basketball %>%
select ( Team , Country , Years_of_FinalFour_Appearances , Years_of_Titles_Won ) %>%
mutate (
Final_Four_Count = str_count ( Years_of_FinalFour_Appearances , "," ) + 1 ,
Title_Won_Count = case_when (
Years_of_Titles_Won %in% c ( "None" , "0" , NA_character_ ) ~ 0 ,
TRUE ~ str_count ( Years_of_Titles_Won , "," ) + 1
) ,
Final_Four_Count = replace_na ( Final_Four_Count , 0 ) ,
Win_Percent = if_else ( Final_Four_Count == 0 , 0 , round ( ( Title_Won_Count / Final_Four_Count ) * 100 , 2 ) ) ,
Flag_URL = paste0 ( "https://flagcdn.com/16x12/" , tolower ( countrycode :: countrycode ( Country , "country.name" , "iso2c" ) ) , ".png" )
) %>%
arrange ( desc ( Win_Percent ) )
table <- master %>%
select ( Country , Team , Final_Four_Count , Title_Won_Count , Win_Percent ) %>%
reactable (
filterable = TRUE ,
theme = reactableTheme (
style = list ( fontFamily = "-system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif" ) ) ,
columns = list (
Country = colDef (
cell = function ( value ) {
iso2 <- tolower ( countrycode ( value , "country.name" , "iso2c" ) )
img_src <- sprintf ( "https://flagcdn.com/32x24/%s.png" , iso2 )
image <- img ( src = img_src , style = "height: 24px;" , alt = value )
tagList (
div ( style = "display: inline-block; width: 50px" , image ) ,
value
)
} ,
headerStyle = list ( textAlign = "center" ) ,
style = list ( textAlign = "left" ) ,
vAlign = "center"
) ,
Team = colDef (
headerStyle = list ( textAlign = "center" ) ,
style = list ( textAlign = "left" ) ,
vAlign = "center"
) ,
Final_Four_Count = colDef (
name = "Appearences in Final Four" ,
headerStyle = list ( textAlign = "center" ) ,
style = list ( textAlign = "right" ) ,
vAlign = "center"
) ,
Title_Won_Count = colDef (
name = "Titles Won" ,
headerStyle = list ( textAlign = "center" ) ,
style = list ( textAlign = "right" ) ,
vAlign = "center"
) ,
Win_Percent = colDef (
name = "Win Ratio" ,
cell = data_bars ( . ,
fill_color = "darkgreen" ,
number_fmt = scales :: percent_format ( scale = 1 ) ,
max_value = 100 ) ,
vAlign = "center"
)
) ,
defaultPageSize = 10 ,
striped = TRUE ,
highlight = TRUE ,
bordered = TRUE
)
table