library(dplyr)
library(tidyr)
library(purrr)
library(glue)
library(reshape2)
library(ggplot2)

dat <- data.frame(Item1=c(1,2,2,4,5), Item2=c(3,3,1,5,2), Item3=c(1,5,5,4,5), 
                  Item4=c(1,4,3,4,2), Item5=c(3,2,3,4,3))

# Find mean scores
for (i in 1:nrow(dat)) {
  dat$ScaleMean[i] <- round(rowMeans(dat, na.rm=T)[i],2)  
}

# Find cohort mean
dat$CoScaleMean <- round(mean(dat$ScaleMean, na.rm=T), 2)

# Add participant IDs
dat$ID <- c(1,2,3,4,5)

dat <- dat %>% 
  nest(items = Item1:Item5) %>% 
  mutate(min = map_dbl(items, min), 
         max = map_dbl(items, max),
         ScaleMean = glue("{ScaleMean} [{min}-{max}]"),
         CoScaleMean = glue("{CoScaleMean} [{min}-{max}]")) %>% 
  select(ID, ScaleMean, CoScaleMean)

# Create long data format
dat.long3 <- melt(dat, id.vars=c('ID'), 
                  measure.vars=c('ScaleMean', 'CoScaleMean'))

dat.long3 <- dat.long3 %>% 
  separate(value, into = c("value", "range"), sep = " ") %>% 
  mutate(value = as.numeric(value))

# Rename variable and value columns
colnames(dat.long3)[c(2,3)] <- c('Scale', 'Score')

# Bar chart
dat.long3 %>% 
  mutate(label = glue("{Score} {range}")) %>% 
  dplyr::filter(ID == 1) %>%
  ggplot(aes(x=Scale, y=Score)) + 
  geom_bar(aes(x=Scale, y=Score, fill=Scale), stat = 'identity', width=.9, alpha=1, position='dodge') +
  coord_flip() +
  ggtitle(label='Scale Name') +
  scale_y_continuous(breaks=seq(0, 5, 1), limits = c(0, 5), expand=c(0,0)) +  
  scale_x_discrete(labels=element_blank()) +    
  scale_fill_manual(label=paste0(c('Your Score', 'Cohort Score')), values=c('gold', 'darkorange')) + 
  guides(fill = guide_legend(nrow = 2, reverse = TRUE)) +
  geom_text(aes(x=Scale, label=label, y=1), size=5, color='#000000')