r - 如何在R中逐行写入文件

标签 r csv

我正在尝试逐行读取 csv 文件,只选择左侧的第二个和第三个单元格,以及右侧的第三个单元格。例如,如果这一行有 17 个单元格,我将取第 15 个单元格。然后我想组合这 3 个单元格,用逗号分隔,然后将此行写入一个新的 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() 但它总是给我错误 Error in

isOpen(path) : 无效连接

谁能帮我?感谢!!!

最佳答案

是的,你可以一行一行地读写,虽然我不知道它会多快。这是一个逐行读取文件的示例,每行中的第 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)

临时文件
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

输出.csv
d
a
4
r

希望有帮助。

编辑:您还可以添加 library(compiler); enableJIT(3)稍微加快你的循环。

关于r - 如何在R中逐行写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45046184/

相关文章:

r - R中的布局内部布局

php - Drupal6 - 使用 MENU_CALLBACK 输出 CSV

javascript - 带有 Express 的 Node.js - 返回指向 .CSV 文件的链接而不是下载它

python - 如何使用 django_postgres_copy 将 headless csv 导入 postgresql?

python - 在python中将 float 写入csv——截断错误

r - 使用 R 中的向量选择具有 rowname 的列值

r - 将空列添加到具有向量中指定名称的数据框

尝试读取时 Csv 为空

r - 连接抖动点的线 - 多组躲避

使用 mvoutlier 删除多元异常值