library(tidyverse)
df <- data.frame(ID=(c("1", "2", "3", "4", "5", "10a", "10b", "11")),
y=c(seq(100,500,100), 150, 155, 180), stringsAsFactors = FALSE)
Простое исправление для простых данных
df$numId<-1:nrow(df)
ggplot(df, aes(x=reorder(ID,numId), y = y)) +
geom_col() +
labs(x='ID', y='Value')
Результат

Создание функции для создания числа c значение
create_id<-function(x) {
if(!grepl('[a-z]',x,ignore.case = TRUE)) {
return(as.numeric(x))
} else {
letter<-tolower(gsub('[0-9]+',"",x))
letter_value<-which(letters==letter)/100
number<-as.numeric(gsub('[a-z]',"",x)) + letter_value
return(number)
}
}
df<-df %>%
group_by(ID, y) %>%
mutate(nid = round(create_id(ID),3))
ggplot(df, aes(x=reorder(ID,nid), y = y)) +
geom_col() +
labs(x='ID', y='Value')
Результат

Спасибо пользователю @ user12728748 за ответ, а также за предоставление кода кадра данных. Мой ответ только здесь, чтобы удовлетворить тег ggplot2 в вопросе. Ответ выше также подходит.