Different levels of UK maps with GeoJSON files

Hi, I have this sample data file:

region.scores <- data.frame(
  stringsAsFactors = FALSE,
  PostCode = c("BB7","BB1","BB12","BB6",
             "BB9","BB3","BB10","PR7","DG1","CA11","CA4","DG2",
             "CA13","DG11","ST7","CW9","CW4","CW6","ST5","CW3",
             "SY13","WA16","PR4","PR2","PR7","PR1","FY8","PR3",
             "PR5","PR25","FY6","FY5","PR6","FY4","PR26","PR9",
             "L40","PR8","LA1","FY3","WN6","ST17","ST18",
             "ST16","ST15","WS15","WS12","ST19","WS11","TF10",
             "ST20","ST21","ST14","ST12","ST15"),
  ScoreA = c(0.717647058823529,
                 0.761194029850746,0.69811320754717,0.764705882352941,
                 0.606060606060606,0.628571428571429,0.827586206896552,
                 0.722222222222222,0.822222222222222,0.693877551020408,
                 0.714285714285714,0.631578947368421,0.695652173913043,
                 0.736842105263158,0.830769230769231,0.868421052631579,
                 0.740740740740741,0.789473684210526,0.730769230769231,
                 0.705882352941177,0.769230769230769,0.8125,0.819672131147541,
                 0.732673267326733,0.741379310344828,0.673076923076923,
                 0.689655172413793,0.84,0.833333333333333,0.682926829268293,
                 0.787878787878788,0.810810810810811,0.857142857142857,
                 0.64,0.666666666666667,0.695652173913043,0.8,0.5625,
                 0.733333333333333,0.823529411764706,0.75,
                 0.811764705882353,0.761194029850746,0.844827586206897,
                 0.736842105263158,0.6,0.769230769230769,0.576923076923077,
                 0.708333333333333,0.92,0.7,0.785714285714286,
                 0.764705882352941,0.684210526315789,0.733333333333333),
   Cor1 = c(53.874,53.756,53.803,53.792,
           53.837,53.698,53.799,53.645,55.073,54.664,54.847,
           55.065,54.66,55.114,53.088,53.259,53.207,53.162,
           53.015,53,52.952,53.303,53.754,53.778,53.645,53.757,
           53.751,53.869,53.731,53.694,53.868,53.874,53.667,
           53.791,53.687,53.66,53.602,53.626,54.046,53.821,
           53.574,52.789,52.814,52.813,52.9,52.758,52.706,
           52.713,52.689,52.769,52.798,52.868,52.903,52.948,52.9),
  Cor2 = c(-2.386,-2.462,-2.29,-2.417,
           -2.214,-2.465,-2.219,-2.652,-3.58,-2.786,-2.833,
           -3.657,-3.366,-3.336,-2.265,-2.501,-2.347,-2.666,
           -2.237,-2.406,-2.689,-2.371,-2.833,-2.708,-2.652,
           -2.701,-3.002,-2.716,-2.656,-2.693,-2.981,-3.021,
           -2.609,-3.028,-2.74,-2.968,-2.841,-3.01,-2.799,-3.021,
           -2.669,-2.099,-2.081,-2.118,-2.148,-1.917,-1.999,
           -2.147,-2.017,-2.385,-2.263,-2.259,-1.868,-2.171,
           -2.148),
  PostCode2digits = c("BB","BB","BB","BB","BB",
                      "BB","BB","PR","DG","CA","CA","DG","CA","DG","ST",
                      "CW","CW","CW","ST","CW","SY","WA","PR","PR",
                      "PR","PR","FY","PR","PR","PR","FY","FY","PR","FY",
                      "PR","PR","L4","PR","LA","FY","WN","ST","ST",
                      "ST","ST","WS","WS","ST","WS","TF","ST","ST","ST",
                      "ST","ST"),
  Region = c("North West","North West",
             "North West","North West","North West","North West",
             "North West","North West","Scotland","North West",
             "North West","Scotland","North West","Scotland",
             "West Midlands","North West","North West","North West",
             "West Midlands","North West","Yorkshire and the Humber",
             "North West","North West","North West","North West",
             "North West","North West","North West","North West",
             "North West","North West","North West","North West",
             "North West","North West","North West","North West","North West",
             "North West","North West","North West",
             "West Midlands","West Midlands","West Midlands","West Midlands",
             "West Midlands","West Midlands","West Midlands",
             "West Midlands","West Midlands","West Midlands",
             "West Midlands","West Midlands","West Midlands","West Midlands"),
  City = c("Blackburn","Blackburn",
           "Blackburn","Blackburn","Blackburn","Blackburn",
           "Blackburn","Preston","Dumfries","Carlisle","Carlisle",
           "Dumfries","Carlisle","Dumfries","Stoke on Trent","Crewe",
           "Crewe","Crewe","Stoke on Trent","Crewe","Sheffield",
           "Warrington","Preston","Preston","Preston","Preston",
           "Blackpool","Preston","Preston","Preston",
           "Blackpool","Blackpool","Preston","Blackpool","Preston",
           "Preston","Liverpool","Preston","Lancaster","Blackpool",
           "Wigan","Stoke on Trent","Stoke on Trent",
           "Stoke on Trent","Stoke on Trent","Walsall","Walsall",
           "Stoke on Trent","Walsall","Telford","Stoke on Trent",
           "Stoke on Trent","Stoke on Trent","Stoke on Trent",
           "Stoke on Trent")
)

region.scores

I also know where all levels of the GeoJSON files are. They are here for the uk: GADM
I know I could download them but I don't know which one is which and I don't know how to code downloads and import to R.

Basically, I would like to create 3 UK maps on 3 levels:

  1. Region Level
regions <- region.scores %>%
  group_by(Region) %>%
  summarise_at(.vars = vars(ends_with(match = "A")),.funs = list(Sc = ~mean(.,na.rm=TRUE), Count = ~sum(!is.na(.))))
regions  
  1. Areas level
areas <- region.scores %>%
  group_by(PostCode2digits) %>%
  summarise_at(.vars = vars(ends_with(match = "A")),.funs = list(Sc = ~mean(.,na.rm=TRUE), Count = ~sum(!is.na(.))))
areas 
  1. Post code level
post.codes <- region.scores %>%
  group_by(PostCode) %>%
  summarise_at(.vars = vars(ends_with(match = "A")),.funs = list(Sc = ~mean(.,na.rm=TRUE), Count = ~sum(!is.na(.))))
post.codes  

I know the final step might be:

ggplot() +
  geom_sf(data = uk.regions, alpha = 0.3) +
  geom_sf(data = uk.regions, aes(fill = ScoreA)) +
  scale_fill_gradient(low = "red", high = "green") +
  labs(title = "Retention Scores by region",
       fill = "Option A") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, size = 20),
        axis.title = element_blank(),
        plot.background = element_blank(),
        legend.position = c(0.10, 0.20),
        plot.margin = margin(5, 0, 5, 0))

but I don't know how to create uk.regions (the same with uk.areas and uk.post.codes) so the middle part of the code with merging my data with relevant GeoJSON files.

Can anyone help?