Lou*_*des 6 csv r large-files dataframe import-from-csv
有没有办法结合使用bigmemory包中的scan()和read.big.matrix()来读取带有混合类型列的200 MB .csv文件,以便结果是一个带整数,字符的数据帧,和数字列?
尝试使用ff包.
library(ff)
help(read.table.ffdf)
Run Code Online (Sandbox Code Playgroud)
函数'read.table.ffdf'将分离的平面文件读入'ffdf'对象,非常像(和使用)'read.table'.它也可以与任何便利包装器一起使用,例如'read.csv',并为R的常用包装器提供自己的便利包装器(例如'read.csv.ffdf').
对于200Mb,它应该是一个简单的任务.
x <- read.csv.ffdf(file=csvfile)
Run Code Online (Sandbox Code Playgroud)
(对于更大的文件,可能需要您调查一些配置选项,具体取决于您的机器和操作系统).
啊,有些事情在这一生中是不可能的,有一些被误解并导致不愉快的情况.@Roman是对的:矩阵必须是一种原子类型.这不是数据帧.
由于矩阵必须是一种类型,尝试斯诺克bigmemory来处理多种类型本身就是一件坏事.可以吗?我不会去那儿.为什么?因为其他一切都会假设它是一个矩阵,而不是数据帧.这将导致更多的问题和更多的悲伤.
现在,您可以做的是识别每个列的类型,并生成一组不同的bigmemory文件,每个文件包含特定类型的项目.例如charBM =字符大矩阵,intBM =整数大矩阵,依此类推.然后,您可以开发一个包装器,从而生成所有这些数据帧.我仍然不建议:将不同的项目视为它们是什么,或者如果可以的话,强迫同质性,而不是试图产生一个大的数据帧格里芬.
@mdsumner建议是正确的ff.另一个存储选项是HDF5,您可以通过ncdf4R 访问.不幸的是,这些其他软件包并不像以前那样令人愉快bigmemory.
根据帮助文件,没有。
文件必须仅包含一种原子类型(例如,全部为整数)。作为用户,您应该知道您的文件是否具有行和/或列名称,并且选项的各种组合应该有助于获得所需的行为。
我不熟悉这个包/函数,但在 R 中,矩阵只能有一种原子类型(与 data.frames 不同)。