我有一个.csv文件,其中包含不同染色体的数据。染色体名称存储在第一列(列名:Chr)中。我的目标是分离每个染色体的数据,即(Chr1,Chr2等),并为每个染色体制作单独的csv文件。我无法理解如何在有限的步骤中做到这一点。 感谢
答案 0 :(得分:6)
使用plyr
和数据集iris
plyr::d_ply(iris, .(Species), function(x) write.csv(x,
file = paste(x$Species, ".csv", sep = "")))
答案 1 :(得分:5)
读取数据
fn <- dir(pattern="csv")
data_in <- do.call(rbind,lapply(fn,read.csv))
按染色体分割
data_out <- split(data_in,data_in[[1]])
按染色体书写
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太大而无法读入内存,它也能正常工作。缺点是这种方法很慢,因为它会打开/关闭大量文件。