Сплит файлы присутствуют в разных папках в R - PullRequest
0 голосов
/ 13 января 2019

У меня есть папка, которая содержит много папок, и каждая папка содержит один CSV-файл. Я хочу разбить каждый файл на основе CN в свою папку. Это позиция файлов:

home -> folder   -> f_5324 -> f_5324.csv
                 -> f_5674 -> f_5674.csv
                 -> f_8769 -> f_8769.csv and so on

Я хочу написать код, который будет принимать первую папку (f_5324), читать файл CSV, затем разбивать этот файл и сохранять в этой папке (f_5324), затем брать вторую папку (f_5674), читать файл CSV, затем разбивать и сохранять в этой папке ( f_5674) затем сделаем то же самое со всеми папками. Это мой код в R: -

dir <- "/home/folder"
my_dirs <- list.dirs(dir, recursive = FALSE)

for(i in my_dirs){
    a <- list.files(path = i, full.names = TRUE, recursive = TRUE)
    df <- read.csv(a)
    a0 <-  df[df$CN=="cn=0",]
    a1 <-  df[df$CN=="cn=1",]
    a3 <-  df[df$CN=="cn=3",]
    a4 <-  df[df$CN=="cn=4",]
    write.csv(a0,"cn0.csv")
    write.csv(a1,"cn1.csv")
    write.csv(a3,"cn3.csv")
    write.csv(a4,"cn4.csv")
}

Я стараюсь, но он не работает должным образом, он разбивает файл, но создает один файл для cn0, cn1, cn3, cn4 и перезаписывает все результаты. Пожалуйста, скажите мне, как передать путь к каждой папке и получить отдельный результат для всех CSV-файлов в собственной папке. Помощь будет оценена

1 Ответ

0 голосов
/ 13 января 2019

Использование -

dir <- "/home/folder"
my_dirs <- list.dirs(dir, recursive = FALSE)

for(i in my_dirs){
  a <- list.files(path = i, full.names = TRUE, recursive = TRUE)
  df <- read.csv(a)
  a0 <-  df[df$CN=="cn=0",]
  a1 <-  df[df$CN=="cn=1",]
  a3 <-  df[df$CN=="cn=3",]
  a4 <-  df[df$CN=="cn=4",]
  write.csv(a0,paste(i,"cn0.csv",sep="/"))
  write.csv(a1,paste(i,"cn1.csv",sep="/"))
  write.csv(a3,paste(i,"cn3.csv",sep="/"))
  write.csv(a4,paste(i,"cn4.csv",sep="/"))
}

Объяснение

В вашей первоначальной реализации write.csv(a0,"cn0.csv") подразумевает, что вы пишете CSV-файл с именем cn0.csv в ваш текущий рабочий каталог.

В следующий раз, когда появится цикл, он просто переопределяет существующий файл снова и снова.

Чтобы избежать этого, вам нужно правильно указывать каталог для каждой записи csv, что было сделано путем изменения на write.csv(a0,paste(i,"cn0.csv",sep="/")), который заполняет правильный целевой каталог.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...