read.csv在读取包含大量列的csv文件时非常慢

rni*_*nja 16 csv r

我有一个.csv文件:example.csv,包含8000列x 40000行.csv文件的每列都有一个字符串标题.所有字段都包含0到10之间的整数值.当我尝试使用read.csv加载此文件时,结果非常慢.添加参数nrow = 100时速度也很慢.我想知道是否有办法加速read.csv,或使用其他函数而不是read.csv将文件作为矩阵或data.frame加载到内存中?

提前致谢.

Jos*_*ich 17

如果您的CSV仅包含整数,则应使用scan而不是read.csv,因为?read.csv说:

 ‘read.table’ is not the right tool for reading large matrices,
 especially those with many columns: it is designed to read _data
 frames_ which may have columns of very different classes.  Use
 ‘scan’ instead for matrices.
Run Code Online (Sandbox Code Playgroud)

由于您的文件有标题,因此您需要skip=1,如果设置它可能会更快what=integer().如果你必须使用read.csv和速度/内存消耗是一个问题,设置colClasses参数是一个巨大的帮助.


raf*_*ira 9

尝试使用fread{data.table}.到目前为止,这是将.csv文件读入R 的最快方法.这里有一个很好的基准.

library(data.table)

data <- fread("c:/data.csv")
Run Code Online (Sandbox Code Playgroud)

如果您想让它更快,您还可以只读取要使用的列的子集:

data <- fread("c:/data.csv", select = c("col1", "col2", "col3"))
Run Code Online (Sandbox Code Playgroud)


Cyr*_*ian 6

还可以尝试Hadley Wickham的readr软件包:

library(readr) 
data <- read_csv("file.csv")
Run Code Online (Sandbox Code Playgroud)