I'd strongly recommend that you look into the sf package if you are going to be working with spatial data in R. It is quite a bit easier to work with than the previous standard spatial package, sp. In fact there was recently a great series of blogposts about making maps with sf and ggplot2: https://www.r-spatial.org/r/2018/10/25/ggplot2-sf.html
As to your specific question about merging non-spatial data with spatial data, the sf package allows you to use (nearly) all the dplyr functions on spatial objects as you would on any R data frame. So, you can use left_join() to merge data from a non-spatial data frame (like from your CSV) with an sf object, given that they have a column in common to join on.
Below, I grab the Denmark spatial data that you reference and then create a subset and remove the the spatial data from it to create a standard data frame (similar to what you might have in your CSV). Then I join that data frame with the sf object and plot it.
library(tidyverse)
library(sf)
#> Linking to GEOS 3.5.1, GDAL 2.1.3, PROJ 4.9.2
# read sf file
dk <- read_rds(gzcon(url("https://biogeo.ucdavis.edu/data/gadm3.6/Rsf/gadm36_DNK_2_sf.rds")))
# make sf subet
dk_a <- select(dk, 1:3, 7)
# make non spatial subset
dk_b <- dk %>%
select(4:7) %>%
st_set_geometry(NULL) %>%
mutate(my_rate = runif(99)) # make up some data to plot
# join spatial and non spatial
dk_merged <- left_join(dk_a, dk_b, by = "NAME_2")
# plot
ggplot(data = dk_merged) +
geom_sf(aes(fill = my_rate))

Created on 2018-11-18 by the reprex package (v0.2.1)