2013-09-30 46 views
0

我有一個很大的數據集,其中的變量用符號|**|分隔。我試圖使用sep="|",但當包含|的字符串變量之一不起作用。如何讓R用複合分隔符讀取數據?如何使R讀取數據由「| ** |」分隔

+0

你是說你有沒有引號的字符串包含|在你的數據?請給出你的輸入的病理例子。 – Roland

回答

4

(坦白說,我認爲這將是更容易的sed要做到這一點,這可能不是R中非常快。)

Lines <- readLines(filename) 
sLines <- strsplit(Lines, "|**|", fixed=TRUE) # Thanks, Richie. 
dat <- read.table(text= sapply(sLines, paste, collapse=",") ,sep=",") 

這裏有一個簡單的datastring測試:

Lines <- "a|**|b|**|c\nd|**|e|**|f" 
sLines <- strsplit(Lines, "\\|\\*\\*\\|") 
dat <- read.table(text= sapply(sLines, paste, collapse=",") ,sep=",") 
dat 
#----------- 
    V1 V2 V3 
1 a b c 
2 d e f 

strsplit使用正則表達式模式,所以你需要雙倍逃脫「特價」。如果您在read.table調用中使用colClasses,速度會更快。見?read.table

+0

通過傳遞'fixed = TRUE',可以使'strsplit'在固定字符串而不是正則表達式上分裂。 –

+0

我猜你的解決方案比'gsub('| ** |','',data)'快,然後是'strsplit'或'readLines'調用到輸出? –

+0

我不知道。您需要將固定參數設置爲TRUE才能獲得成功。 –

相關問題