如何在R中创建多个csv文件?

时间:2011-11-14 19:31:45

标签: r plyr

我有一个.csv文件,其中包含不同染色体的数据。染色体名称存储在第一列(列名:Chr)中。我的目标是分离每个染色体的数据,即(Chr1,Chr2等),并为每个染色体制作单独的csv文件。我无法理解如何在有限的步骤中做到这一点。 感谢

3 个答案:

答案 0 :(得分:6)

使用plyr和数据集iris

说明单行内容
plyr::d_ply(iris, .(Species), function(x) write.csv(x, 
  file = paste(x$Species, ".csv", sep = "")))

答案 1 :(得分:5)

  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 :(得分:2)

一种方法是一次读取一行输入文件,并根据该行的前x个字符将该行附加到正确的outfile:

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太大而无法读入内存,它也能正常工作。缺点是这种方法很慢,因为它会打开/关闭大量文件。