我正在尝试逐行读取csv文件,并仅选择左侧第二个和第三个单元格以及右侧第三个单元格。例如,如果此行中有17个单元格,则我将取第15个单元格。然后,我想通过逗号将这3个单元格组合在一起,然后将此行写入新的csv文件。
目前,我只是使用for循环访问每一行,然后按逗号拆分它们。然后我选择我想要的单元格并将它们组合成一个字符串并附加到一个大的字符串变量中。一旦for循环完成,我通过writeLines()写出文件。但是,由于有280万行,所以这个过程需要很长时间并且需要大量内存。有没有更有效的方法?或者我能否在for循环中逐行写入输出文件?
目前,我只是使用for循环访问每一行,然后按逗号拆分它们。然后我选择我想要的单元格并将它们组合成一个字符串并附加到一个大的字符串变量中。一旦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(path) : invalid connection"。有人可以帮忙吗?非常感谢!
sed
或awk
。如果您的数据可以放入内存中,则在R中一次性读取整个数据框(或以500k行批次),选择所需列,然后一次性写出输出将会更快。 - Gregor Thomas