Как создать несколько файлов CSV в R? - PullRequest
2 голосов
/ 14 ноября 2011

У меня есть файл .csv с данными для разных хромосом.Имена хромосом хранятся в первом столбце (имя столбца: Chr).Моя цель состоит в том, чтобы отделить данные для каждой хромосомы, т. Е. (Chr1, Chr2 и т. Д.) И создать отдельные файлы CSV для каждой.Я не могу понять, как сделать это в ограниченных шагах.Спасибо

Ответы [ 3 ]

6 голосов
/ 15 ноября 2011

Иллюстрирование одного вкладыша с использованием plyr и набора данных iris

plyr::d_ply(iris, .(Species), function(x) write.csv(x, 
  file = paste(x$Species, ".csv", sep = "")))
5 голосов
/ 15 ноября 2011
  1. Чтение данных

    fn <- dir(pattern="csv")
    data_in <- do.call(rbind,lapply(fn,read.csv))
    
  2. Разделение по хромосоме

    data_out <- split(data_in,data_in[[1]])
    
  3. Запись по хромосоме

    chn <- unlist(lapply(data_out,"[",1,1))
    for(i in seq_along(chn)) write.csv(data_out[[i]],file=paste(chn[i],"csv",sep="."))
    
2 голосов
/ 15 ноября 2011

Одним из способов является чтение входного файла по одной строке за раз и добавление строки в правильный выходной файл на основе первых x символов строки:

con <- file('yourInputFile', 'r') 

while (length(input <- readLines(con, n=1) > 0){ 
      outputfile <- paste(substr(input, 1, 5), ".csv", sep="" ) 
       ### assuming first 5 characters are new file name
      outfile <- file(outputfile, 'a')
      writeLines(output, con=outfile)
      close(outfile)
} 

Преимущество этого подхода в том, что он работает, даже если yourInputFile слишком велик для чтения в память. Недостатком является то, что этот подход медленный, так как он делает много открытий / закрытий файлов.

...