阅读巨大的.csv文件与单引号中的一些列,但不是所有与freed从data.table包

问题描述:

我很抱歉,我不能真正创造一个可重复的例子(或者我猜,至少不是根据规则),但仍希望求助。 我使用的数据在这里: American Housing Survey 2013 data阅读巨大的.csv文件与单引号中的一些列,但不是所有与freed从data.table包

由于数据文件是相当大的,我想用而不是“read.csv”命令“FREAD”命令。随着read.csv我可以做到以下几点:

homimp <- read.csv("homimp.csv", quotes = "'") 
head(homimp) 
     CONTROL RAS RAH RAD JRAS JRAD 
1 100003130103 74 2 96 -9 9 
2 100006110249 35 2 8358 -9 9 
3 100006110249 36 2 5970 -9 9 
4 100006110249 37 2 6567 -9 9 
5 100006110249 40 2 716 -9 9 
6 100006110249 45 2 1910 -9 9 

,它会删除引号(注意,一列(RAD)是不是摆在首位报价) 但是,如果我用fread读我似乎不能够删除引号 的报价参数返回一个错误:

homimpdt <- fread("homimp.csv", quote = "'") 
Error in fread("homimp.csv", quote = "'") : unused argument (quote = "'") 

而且没有参数报价不会被删除:

homimpdt <- fread("homimp.csv") 
head(homimpdt) 
      CONTROL RAS RAH RAD JRAS JRAD 
1: '100003130103' '74' '2' 96 '-9' '9' 
2: '100006110249' '35' '2' 8358 '-9' '9' 
3: '100006110249' '36' '2' 5970 '-9' '9' 
4: '100006110249' '37' '2' 6567 '-9' '9' 
5: '100006110249' '40' '2' 716 '-9' '9' 
6: '100006110249' '45' '2' 1910 '-9' '9' 

为什么我想这样做:

> system.time(newhouse <- read.csv('newhouse.csv', quote = "'")) 
    user system elapsed 
    24.86 0.68 25.77 
> system.time(newhousedt <- fread('newhouse.csv')) 
Read 84355 rows and 760 (of 760) columns from 0.273 GB file in 00:00:04 
    user system elapsed 
    3.33 0.07 3.41 

非常感谢您的帮助!

广告Psidom的评论:

homimpdt <- fread("homimp.csv", quote = "\'") 
Error in fread("homimp.csv", quote = "'") : unused argument (quote = "'") 
+0

设置'quote =“\'”'。 – Psidom

+0

@ Psidom:谢谢你的回答,但不幸的是它也会返回一个错误。 –

+2

除非从github使用1.9.7,否则'data.table :: fread()'没有'quote'参数,但是这个文件是~67K行。这不是一个大文件,真的不保证使用'fread()'作为“速度” – hrbrmstr

在注释中给出的答案摘要:

解决方案#1: 感谢@Psidom和@jangorecki

安装data.table v 1.9 .7:

install.packages("data.table", type="source", repos="http://Rdatatable.github.io/data.table") 

然后运行:

homimpdt <- fread("homimp.csv", quote = "\'") 

编辑:于CRAN data.table当前版本1.9.6是

解决方案2(仅限Linux): 感谢@RichScriven

可以在这里找到: Preventing column-class inference in fread()

and set as.is = TRUE in type.convert() function