2013-04-05 34 views
4

我需要读几个巨大的(> 400MB)CSV日志文件到R的文件看起来像:读取庞大的CSV文件非法EOL标记

ňVISIT_DATE REQ_URL TYPE_LEVEL

126424一分之二千〇一十三/ 25 23点42分34秒1 http://weibo.cn/attgroup/privateAtt?cat=user&f=atts

33559 2013年1月25日十五点15分54秒1 http://i.ifeng.com/mil/mili?vt=5&dh=touch&mid=aKUiAg

我使用下面的命令来阅读下载csv文件的内容。它适用于大多数数据。但是,REQ_URL字段中有一些非法字符,如http://some.url/query=_1A_,其中1A是十六进制代码,与LF标记十分相似。似乎scan函数将这些字符视为EOL标记,并在遇到它们时停止。有什么办法让R忽略这些字符或被当作EOL标记吗?谢谢。

DAT <〜扫描(文件= 'sample.sv', 什么=列表( “整数”, “数字”, “字符”, “整数”), 月= '\ t' 的条。白= T,报价= “”, multi.line = F,跳过= 1)

+0

为什么不在这里使用'read.table'? – agstudy 2013-04-05 18:44:09

+0

日志文件的大小很大(> 400MB),'read.table'可能导致R崩溃。 – baidao 2013-04-06 03:30:08

回答

2

您可以使用fread相似,但函数read.table更快,更方便。

TEXT <- '126424 2013/1/25 23:42:34 http://weibo.cn/attgroup/privateAtt?cat=user&f=atts 1 
33559 2013/1/25 15:15:54 http://i.ifeng.com/mil/mili?vt=5&dh=touch&mid=aKUiAg 1 
33556 2013/1/25 15:15:59 http://some.url/query=_1A_ 1' 
library(data.table) 
fread(TEXT) 
     V1  V2  V3             V4 V5 
1: 126424 2013/1/25 23:42:34 http://weibo.cn/attgroup/privateAtt?cat=user&f=atts 1 
2: 33559 2013/1/25 15:15:54 http://i.ifeng.com/mil/mili?vt=5&dh=touch&mid=aKUiAg 1 
3: 33556 2013/1/25 15:15:59       http://some.url/query=_1A_ 1 
+0

Thx! “fread”速度惊人! – baidao 2013-04-06 12:10:35