2015-05-22 118 views
4

我有一個帶有「::」分隔符的文本文件。
當我讀下面這個文件。如何讀取分隔R中的「::」的.dat文件

tmp <- fread("file.dat", sep="::") 
tmp <- read.table("file.dat", sep="::") 

有一個'sep' must be 'auto' or a single characterinvalid 'sep' value: must be one byte錯誤消息。

我怎樣才能讀取這個文件?

+1

或者比Richards的建議更不可愛......沿着'read.table(text = gsub(「::」,「」,readLines(yourfile))'')這樣的事情' – user20650

回答

3

你可以嘗試

fread("cat file.dat | tr -s :", sep = ":") 

fread()允許在其第一個參數的系統調用。這一個使用tr -s,這是一個「擠壓」命令,用單個出現的字符替代:的重複。

通過此調用,fread()甚至可以自動識別sep參數,無需命名。

使用相同的概念,另一種方式,你可以去(有一個例子文件「x.txt」)是做

writeLines("a::b::c", "x.txt") 
read.table(text = system("cat x.txt | tr -s :", intern = TRUE), sep = ":") 
# V1 V2 V3 
# 1 a b c 

我不知道如何轉換到基於Windows的系統。

+0

這怎麼能在Windows上完成? – Molx

+0

您可以在Windows機器上使用'shell()'來代替'system()'。但是,我不確定命令會是什麼。與'fread()'相同'我認爲,只需用bash命令替換(但不要在此引用我)。 –

+0

我在windows上使用。但出現錯誤(執行失敗,錯誤代碼爲255)。 fread()和read.table使用shell()。 – Rokmc1050