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')
