#r #select #conditional-statements
#r #выберите #условные операторы
Вопрос:
У меня есть рабочий каталог под названием «NVSPL», содержащий более 7000 файлов .txt. Некоторые из этих файлов я хочу игнорировать во время анализа. Я создал отдельный файл CSV со столбцом, который содержит имя и расширение каждого из более чем 7000 файлов .txt в моем рабочем каталоге. Второй столбец в CSV имеет либо «0», если я хочу сохранить связанный файл .txt, либо «1», если я хочу игнорировать связанный файл .txt.
Как я могу заставить R просмотреть CSV, найти все «0» и создать новую папку с соответствующими файлами .txt?
В этом случае я хотел бы создать новую папку, которая будет содержать только файлы с «0» в столбце «GoodData».
Спасибо вам за ваше время и усилия.
Комментарии:
1. Я не думаю, что есть какая-либо необходимость создавать новую папку и перемещать файлы, если вы отметили файлы? Просто используйте флаг в качестве основы для чтения в R или нет.
2. @neilfws спасибо за комментарий. Я согласен, это был бы лучший способ сделать это, чтобы свести к минимуму создание новых папок. Есть ли у вас какие-либо предложения о том, как это сделать?
Ответ №1:
Мы можем использовать file.copy
. Подмножество файлов из столбца «Имя файла», а затем file.copy
скопируйте эти файлы в созданный новый каталог
files <- file.path("path/to", with(df1, FileName[!GoodData]))
dir.create("path/to/NVSPL_new", recursive = TRUE)
for(file in files) {
file.copy(file, "path/to/NVSPL_new")
}
Комментарии:
1. Спасибо за ответ. Однако я не уверен, что понимаю, как это работает. Я предполагаю, что «df1» — это CSV-файл, уже загруженный в R. Предполагая это и добавляя путь к каталогу файлов .txt, где у вас есть «путь / к», R возвращает сообщение об ошибке: «Ошибка в eval(substitute(expr), data, enclos = parent.frame()): объект ‘FileName’ не найден» Есть идеи? Кроме того, я не понимаю, как ваш код выбирает на основе «0» или «1». Спасибо!
2. @user3494534 Да, в вашем столбце «Имя файла» указано только имя файла, а не путь. Для копирования файлов требуется правильный путь. Я использовал
path/to/
, чтобы вы могли изменить их, используя либоpaste
илиfile.path
3. @user3494534 Что касается
!GoodData
, столбец является двоичным. Если мы отрицаем (!
) , то он преобразуется в логический, при этом 0 изменяется на TRUE, а 1 на FALSE. Итак, мы используем это для подмножества имени файла ‘, это также может быть сделано явно какFileName[GoodData == 0]
4. @user3494534 Вам нужно двойное «