2015-02-24 88 views
0

我有以下的txt文件:R讀取文件用花括號

Header1 Header2 Header3 
1 5 {Joe, John, Sam} 
2 9 {Mike} 
3 5 {Bob, Alice} 

我想用下面的命令來讀取它,但它給出了一個錯誤:

data = read.table("file_location/data.txt", sep=" ", strip.white=TRUE, header=TRUE) 

more columns than column names 

我怎麼能讀這樣的文件?

+0

做你必須做的這在r?用引號替換大括號(使用你最喜歡的文本編輯器或shell命令)並正常讀取 – rawr 2015-02-24 16:25:30

+0

是的,在R.而我不想開始替換字符。 – Bob 2015-02-24 16:30:17

回答

1

這是很容易的:

> read.table(text = chartr("{}", "''", readLines("data.txt")), header = TRUE) 
    Header1 Header2  Header3 
1  1  5 Joe, John, Sam 
2  2  9   Mike 
3  3  5  Bob, Alice 

的關鍵部分是使用chartr來代替單引號大括號。

0

這將做到這一點,無需替換字符。 read.pattern提取捕獲組(匹配正則表達式的括號部分的文本)並將它們排列到data.frame中。我們分別閱讀標題。 text = Lines部分可以替換爲"myfile",例如從文件中讀取文本。

# test data 
Lines <- "Header1 Header2 Header3 
1 5 {Joe, John, Sam} 
2 9 {Mike} 
3 5 {Bob, Alice}" 

library(gsubfn) 

DF <- read.pattern(text = Lines, pattern = "^ *(\\S+) (\\S+) (.*)", skip = 1, 
    as.is = TRUE, col.names = read.table(text = Lines, as.is = TRUE, nrow = 1)) 

,並提供:

Header1 Header2   Header3 
1  1  5 {Joe, John, Sam} 
2  2  9   {Mike} 
3  3  5  {Bob, Alice} 

正則表達式的可視化如下所示:

^ *(\S+) (\S+) (.*) 

Regular expression visualization

Debuggex Demo