Я думаю, что это помогает. Обратите внимание, он сортирует только по фактическому числу и игнорирует буквы. Он не чувствителен к буквам, прикрепленным в конце последнего числа, поскольку именно так выглядят данные, но регулярное выражение можно изменить в соответствии с любыми потребностями.
library(data.table)
datalist <- c("20191107_1545_28.xlsx","20191108_1520_95.xlsx","20191108_1104_99.xlsx","20200127_1505_28.xlsx", "20200124_1505_41B.xlsx", "20200122_1505_1.xlsx", "20191102_1520_102.xlsx")
dt <- data.table('datalist' = datalist)
dt[, 'num1' := as.numeric(gsub(pattern = '(\\d{1,10})(_)(\\d{1,10})(_)(\\d{1,10})(.*)', x = datalist, replacement = '\\1'))]
dt[, 'num2' := as.numeric(gsub(pattern = '(\\d{1,10})(_)(\\d{1,10})(_)(\\d{1,10})(.*)', x = datalist, replacement = '\\3'))]
dt[, 'num3' := as.numeric(gsub(pattern = '(\\d{1,10})(_)(\\d{1,10})(_)(\\d{1,10})(.*)', x = datalist, replacement = '\\5'))]
setkey(dt, num3, num1)
print(dt$datalist)
Редактировать: забыл сделать приведение к цифре c. Исправлено.