Как упорядочить список по конечному номеру в имени элемента списка?
У меня есть следующий код, который дает список из нескольких текстовых файлов, как мне переупорядочить список на основе последнего номера (1770, 1780, 1790, 1800, 700, 710), так что порядок списка теперь увеличивается или убывающий порядок (700, 710, 1770, 1780, 1790, 1800)
> file_list <- list.files(path=folder, pattern="*.txt")
> file_list
выход:
[78] "172010_001_122C_2.0_1770.txt"
[79] "172010_001_122C_2.0_1780.txt"
[80] "172010_001_122C_2.0_1790.txt"
[81] "172010_001_122C_2.0_1800.txt"
[82] "172010_001_122C_2.0_700.txt"
[83] "172010_001_122C_2.0_710.txt"
[84] "172010_001_122C_2.0_720.txt"
2 ответа
Есть несколько способов сделать это. Я предпочитаю работать с регулярными выражениями, которые можно обрабатывать с помощью базы R. Ниже приведен пример использования stringr
пакет
library(stringr)
## Create some example data
file_list <- c("172010_001_122C_2.0_1770.txt",
"172010_001_122C_2.0_1780.txt",
"172010_001_122C_2.0_700.txt")
Мы извлекаем последнюю часть строки перед .txt
, Обратите внимание, что длина значения отличается - в противном случае мы могли бы использовать substr
функции непосредственно и извлекли соответствующие символы. Здесь мы извлекаем все числа прямо перед .txt
, Они возвращаются в символьной матрице со вторым столбцом, содержащим то, что мы ищем
result <- as.numeric(str_match(file_list, "(\\d+)\\.txt")[,2])
result
[1] 1770 1780 700
Затем вы можете отсортировать имена файлов
file_list[order(result)]
[1] "172010_001_122C_2.0_700.txt" "172010_001_122C_2.0_1770.txt"
[3] "172010_001_122C_2.0_1780.txt"
Вот решение в базе R с использованием gsub
file_list <- c("172010_001_122C_2.0_1770.txt",
"172010_001_122C_2.0_1780.txt",
"172010_001_122C_2.0_700.txt")
file_list[order(as.numeric(gsub(".+_(\\d+)\\.txt$", "\\1", file_list)))]
# [1] "172010_001_122C_2.0_700.txt" "172010_001_122C_2.0_1770.txt"
# [3] "172010_001_122C_2.0_1780.txt"
Пояснение: мы сопоставляем выражение .+_
с последующими цифрами \\d+
с последующим .txt
и порядок, увеличивая цифры.