Как упорядочить список по конечному номеру в имени элемента списка?

У меня есть следующий код, который дает список из нескольких текстовых файлов, как мне переупорядочить список на основе последнего номера (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и порядок, увеличивая цифры.

Другие вопросы по тегам