Фильтровать имена файлов в R по шаблону

У меня есть список файлов в каталоге с форматом

Firstname-Lastname-DateofBirth-ID.pdf

Например Tom-Hanks-01.01.1960-5555.pdf Идентификатор до сих пор представляет собой 4-значное число, но в будущем он может быть 5- или 6-значным.

У меня есть вектор идентификаторов, соответствующие файлы PDF которых я хотел бы переместить в другой каталог

Я хотел бы, чтобы R прочитал список файлов в каталоге, идентифицировал идентификатор из имени файла, проверил, находится ли идентификатор в векторах идентификаторов для перемещения, и если да, переместите файл.

Я могу сделать последнюю часть с помощью if () , %in% и system(). Как можно сделать фильтрацию?

Предпочтительное решение tidyverse.

Извините, если я не могу привести воспроизводимый пример. Однако поможет только чтение имен файлов и извлечение идентификатора из имени файла.

Если вектор идентификаторов называется id_vec, то можно попробовать dir(pattern = paste(id_vec, collapse = '|'), full.names = TRUE)

Darren Tsai 10.01.2023 12:39
Laravel с Turbo JS
Laravel с Turbo JS
Turbo - это библиотека JavaScript для упрощения создания быстрых и высокоинтерактивных веб-приложений. Она работает с помощью техники под названием...
Типы ввода HTML: Лучшие практики и советы
Типы ввода HTML: Лучшие практики и советы
HTML, или HyperText Markup Language , является стандартным языком разметки, используемым для создания веб-страниц. Типы ввода HTML - это различные...
Аутсорсинг разработки PHP для индивидуальных веб-решений
Аутсорсинг разработки PHP для индивидуальных веб-решений
Услуги PHP-разработки могут быть экономически эффективным решением для компаний, которые ищут высококачественные услуги веб-разработки по доступным...
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
Слишком много useState? Давайте useReducer!
Слишком много useState? Давайте useReducer!
Современный фронтенд похож на старую добрую веб-разработку, но с одной загвоздкой: страница в браузере так же сложна, как и бэкенд.
Узнайте, как использовать теги <ul> и <li> для создания неупорядоченных списков в HTML
Узнайте, как использовать теги <ul> и <li> для создания неупорядоченных списков в HTML
HTML предоставляет множество тегов для структурирования и организации содержимого веб-страницы. Одним из наиболее часто используемых тегов для...
2
1
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Предположим, у нас есть следующие текстовые файлы в текущем рабочем каталоге.

$ ls *.txt

Tom-Hanks-01.01.1960-11.txt  
Tom-Hanks-01.01.1960-88.txt    
Tom-Hanks-01.01.1960-4444.txt
Tom-Hanks-01.01.1960-5555.txt
Tom-Hanks-01.01.1960-123456.txt  

И я хочу переместить файлы с идентификаторами 111, 222, 5555, 88 и 123456 в папку текущего wd с именем dest. Итак, мы можем сделать следующее,

library(fs)
library(stringr)

# grab the text files
files <- fs::dir_ls(".", glob = "*.txt")
id_to_move <- c(111, 222, 5555, 88, 123456)

# match the pattern which files we need to move.
files_to_move <- files[str_extract(files, "(?<=-)\\w+(?=.txt)") %in% id_to_move]

# move the file.
fs::file_move(files_to_move, "dest")
$ ls dest

Tom-Hanks-01.01.1960-123456.txt  
Tom-Hanks-01.01.1960-5555.txt  
Tom-Hanks-01.01.1960-88.txt

С основанием R:

    filelist <- list.files(pattern = "*.csv")
    
    filelist
    [[1]]
    [1] "Tom-Hanks-01.01.1960-11.pdf"
    
    [[2]]
    [1] "Tom-Hanks-01.01.1960-88.pdf"
    
    [[3]]
    [1] "Tom-Hanks-01.01.1960-4444.pdf"
    
    [[4]]
    [1] "Tom-Hanks-01.01.1960-5555.pdf"
    
    [[5]]
    [1] "Tom-Hanks-01.01.1960-123456.pdf"

idsToMove <- c(1111, 2222, 3333, 4444, 5555)

toMove <- filelist[sapply(filelist, FUN = \(x) strsplit(x=x, split = "-|.pdf", perl=TRUE)[[1]][4] %in% idsToMove)]

> toMove
[[1]]
[1] "Tom-Hanks-01.01.1960-4444.pdf"

[[2]]
[1] "Tom-Hanks-01.01.1960-5555.pdf"

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