1

我正在尝试使用“ff”包中的函数 read.table.ffdf() 读取一个非常大的 .csv 文件,大小约为 20G,但在 read.csv() 中指定 colClasses 选项时遇到了麻烦。

我必须指定 colClasses 选项,因为文件中的某些列是非常长的整数的标签,例如 11 位数字。例如,文件中的两行是

86246,205,17,1719,104116343,8435,2013-03-13,12,OZ,1,2.59
86246,205,17,1719,10800749282,8435,2013-03-13,12,OZ,1,2.59 

整数 10800749282 对于“integer”类型来说太大了,只能作为“numeric”或“character”处理。但是上一行中的值 104116343 不够大,所以 R 默认会将此列视为“整数”。

我尝试了以下但有一个错误。有谁知道如何解决这个问题?高度赞赏!

dat <- read.table.ffdf(file="file.csv", FUN = "read.csv", na.strings = "", colClasses="character")

ff 中的错误(initdata = initdata,长度 = 长度,级别 = 级别,有序 = 有序,:未实现 vmode 'character'

4

1 回答 1

0

正如您的错误所暗示的,在 ff 环境中没有实现“字符”数据类型。所有字符都应被视为因素。假设您的文件包含x列,则以下工作:

dat <- read.csv.ffdf(NULL, file="file.csv", na.strings = "", colClasses=rep("factor", x))

但是,您可能需要的不是将所有数据作为因子导入,因为它效率极低。只需将所有数字数据导入为“数字”。假设您的前5列是数字,其余3列是字符:

dat <- read.csv.ffdf(NULL, file="file.csv", na.strings = "", colClasses=c(rep("numeric", 5), rep("factor", 3)))

于 2014-07-01T10:21:19.010 回答