如何在R中逐行写入文件

时间:2017-07-11 23:51:01

标签: r csv

我试图逐行读取csv文件,只从左边选择第2和第3个单元格,从右边选择第3个单元格。例如,如果此行中有17个单元格,我将采用第15个单元格。然后我想组合这三个单元格,用逗号分隔,然后将这一行写入一个新的csv文件。

现在,我只是使用for循环来访问每一行,然后用逗号分隔它们。然后我选择我想要的单元格并将它们组合成一个字符串并附加到一个大的String变量。一旦for循环结束,我通过writeLines()写出文件。但是,完成此过程需要很长时间,因为有280万行并且需要大量内存。有没有办法让它更有效率?或者我可以在for循环中逐行编写输出文件吗?

FileLinebyLine <- read_lines("testfile.csv")

pt<-proc.time()
NewFile <- ""
RowList <- list()
for (i in 1:length(FileLinebyLine))
{
    a <- strsplit(FileLinebyLine[i],",")
    RowList[i] = paste(a[[1]][2],a[[1]][3],a[[1]][(length(a[[1]]) - 2)], sep = ",")

}
NewFile <- paste(unlist(RowList), sep = "\n")
proc.time()-pt
outputfile <- file("output.txt")
writeLines(NewFile,outputfile)
close(outputfile)

我也尝试在for循环中使用write_lines()但它总是给我错误

isOpen(路径):连接无效

任何人都可以帮助我吗?感谢!!!

1 个答案:

答案 0 :(得分:0)

是的,你可以逐行阅读和书写,虽然我不知道它会有多快。这是一个逐行读取文件的示例,每行第4个项目,一次写入一个新文件:

con = file("temp.csv", "r")
while(length(x <- readLines(con, n = 1)) > 0) {
    write(strsplit(x,",")[[1]][4], file="out.csv", append=T)
}
close(con)

temp.csv

a,b,c,d,e,f,g,h
x,y,z,a,b,c,d,e
1,2,3,4,5,6,7,8
q,w,e,r,t,y,u,i

out.csv

d
a
4
r

希望有所帮助。

编辑:您还可以添加library(compiler); enableJIT(3)来加快循环速度。