2013-04-05 37 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