Here are two ways to get items 1-3. Number 4 can be done but I don't recall which package facilitates that.
library(ggplot2)
Clean.Blood.Preasure <- read.csv("~/R//Play/Dummy.csv",sep="|")
Clean.Blood.Preasure$Blood.Pressure <- factor(Clean.Blood.Preasure$Blood.Pressure,
levels = c("Resting.Systolic", "Resting.Diastolic", "Exercise.Systolic",
"Exercise.Diastolic", "Recovery.Systolic", "Recovery.Diastolic"))
ggplot(data = Clean.Blood.Preasure, mapping = aes(Blood.Pressure, Mean)) +
geom_col(fill=rep(c("red","blue"),3)) +
geom_errorbar(aes(ymin = Mean-SD, ymax = Mean + SD), width = .2) +
scale_y_continuous(breaks = seq(0,160,20))

library(tidyr)
Clean.Blood.Preasure2 <- separate(data = Clean.Blood.Preasure,col = Blood.Pressure,
into = c("State","Measure"))
Clean.Blood.Preasure2
#> State Measure Mean SD SEM Count P.Value
#> 1 Resting Systolic 116.57460 13.39587 1.1572270 134 2.200e-16
#> 2 Resting Diastolic 70.29104 10.62330 0.9177134 134 6.099e-02
#> 3 Exercise Systolic 134.88060 15.72128 1.3581120 134 2.200e-16
#> 4 Exercise Diastolic 72.47761 14.21358 1.2278660 134 6.099e-02
#> 5 Recovery Systolic 115.41040 13.52926 1.1687500 134 NA
#> 6 Recovery Diastolic 71.33582 12.36472 0.9177134 134 NA
ggplot(data = Clean.Blood.Preasure2, mapping = aes(State, Mean,fill=Measure)) +
geom_col(position = "dodge") +
geom_errorbar(aes(ymin = Mean-SD, ymax = Mean + SD), position=position_dodge(0.9), width = .2) +
scale_y_continuous(breaks = seq(0,160,20))

Created on 2021-11-07 by the reprex package (v2.0.1)