2013-04-05 54 views
0

我創建了一個名爲的test2.txt以下信息文件:[R列函數read.table左移

col1 col2 col3 col4 
1 A B 
2 A B 
3 A B 
4 A B 
5 A B 
6 A B 
7 A   C 
8 A   C 

當使用以下命令讀取:

test.ws=read.table(paste(inputDir,'test2.txt',sep=''),fill=T,header=T) 

我得到以下:

col1 col2 col3 col4 
1 1 A B NA 
2 2 A B NA 
3 3 A B NA 
4 4 A B NA 
5 5 A B NA 
6 6 A B NA 
7 7 A C NA 
8 8 A C NA 

列向左移動。是什麼賦予了?!

我試過如下:

> count.fields(paste(inputDir,'test.txt',sep='')) 
[1] 4 3 3 3 3 3 3 4 4 

而且它告訴我,選項卡的數量是不同的,但它不是!我該怎麼處理這些信息?值得一提的是,將這個.txt文件導入到Excel中時,它會正確讀取這些標籤,並且不會跳過或移動任何列。

我試圖單獨做這個指定的列名,但沒有奏效:

colNames=names(test.ws) 
test.ws=read.table(paste(inputDir,'test2.txt',sep=''),skip=1,fill=T,header=T,col.names=colNames) 

產量:

Warning message: 
In read.table(paste(inputDir, "test2.txt", sep = ""), skip = 1, : 
    header and 'col.names' are of different lengths 

我發現了一個類似的問題在網上:https://stat.ethz.ch/pipermail/r-help/2008-July/166676.html。這個問題沒有回答。

+0

我認爲這是轉移。看看我給R的.txt文件。它顯然在第7行和第8行有四列。但是當我讀取時,將它定位到R,第四列簡單地是NA,第七行和第八行的第四列向左移動。 – 2013-04-05 16:13:54

+1

如果列分隔符只是空格,R怎麼可能知道最後幾行的空格應該包含一個空列? – joran 2013-04-05 16:20:49

回答

5

如果這是製表符分隔數據,請相應地設置分隔符:sep="\t"。否則(從幫助上read.table

如果sep = ""(默認函數read.table爲),隔板爲「白色空間」,這是一個或多個空格,製表符,換行符或回車。

等多個連續製表符被視爲單個分隔符。

或者使用read.delim代替read.table爲具有缺省值更適合於製表符分隔的數據。

+0

賓果!我可以發誓我是這麼做的,但我顯然正在考慮粘貼()中的sep。這很尷尬...... – 2013-04-05 16:48:44

2

也許你有固定寬度的列?

read.fwf(textConnection("col1 col2 col3 col4 
1 A B 
2 A B 
3 A B 
4 A B 
5 A B 
6 A B 
7 A   C 
8 A   C"),widths = rep(5,4)) 

    V1 V2 V3 V4 
1 col1 col2 col3 col4 
2 1  A  B <NA> 
3 2  A  B <NA> 
4 3  A  B <NA> 
5 4  A  B <NA> 
6 5  A  B <NA> 
7 6  A  B <NA> 
8 7  A    C 
9 8  A    C