2015-10-20 43 views
0

我想讀取由9列和208行組成的文本文件。read.table()將所有數據讀取爲單行

要閱讀它,我用:

file=read.table("C:\\Users\\foo.txt",sep="") 
> str(file) 
'data.frame': 1 obs. of 21 variables: ### this not right 
> class(file) 
[1] "data.frame" 

看來,它錯過了一切。最後我得到這個警告:

incomplete final line found by readTableHeader on 'C:\Users\foo.txt' 
+1

如果不訪問實際文件,這可能很難診斷。但是,這些問題幾乎總是歸結爲文件中出現的「奇怪」,而您並不知道。 – joran

+2

也許調整'comment.char'參數然後...?但是我們仍然在猜測,而且還可能有更多我們不知道的問題。 – joran

+0

文件中似乎沒有換行符......但是,似乎有一個系統化的結構。所以,也許你可以使用快速命令行文本編輯器(如sed或awk)預處理以添加換行符。 – Roland

回答

1

由於該文件相當小,我們可以用readLines()來讀取它,然後使用正則表達式對其進行處理,方法是添加適當的換行符,以便爲read.table()做好準備。另請注意,我在撥打read.table()時使用了comment.char = ""。這樣我們就可以成功讀取那些值可能包含#的行。

rl <- readLines("Downloads/coord.txt") 
df <- read.table(
    text = gsub("(?<=\\S) (?=SCAN)", "\n", rl, perl = TRUE), 
    comment.char = "" 
) 
dim(df) 
# [1] 208 9 

根據OP的要求未顯示數據。

1

它看起來像你沒有任何行尾字符。鑑於結構性,您可以嘗試

library(magrittr) 
DF <- readLines(filename) %>% 
    gsub("[)] XXXX", ") \nXXXX", .) %>% 
    textConnection() %>% 
    read.table(sep = "") 

其中「XXXX」是該行的前四個字符。