2015-09-06 21 views
0

我需要將製表符分隔文本文件中的數據導入到R中。問題是每個記錄中數據文件中製表符的數量是不同的。數據看起來像這樣(注意:「 - >」表示一個製表符,{LF}表示行結束(換行) - 注意每個記錄中的製表符數量不同,變量位於不同的位置 - 標題行只有7個變量,但記錄3具有從D13通D21即,9個值)值:在R中導入製表符分隔的文本數據與「不等」數量的製表符

V1 -> V2 -> V3 -> V4 -> V5-> V6 -> V7 {LF} 
D1 -> D2 -> D3 -> D4 -> D5-> D6 -> {LF} 
D7 -> D8 -> D9 -> D10 -> -> D12 {LF} 
D13 -> D14 -> D15 -> D16 -> D17-> D18 -> D19 -> D20 -> D21 {LF} 

我怎麼讀它,這樣我得到這樣的(記住該變量的最大數量是9,而不是7如標題欄所示):

V1 -> V2 -> V3 -> V4 -> V5-> V6 -> V7 -> V8 -> V9 {LF} 
D1 -> D2 -> D3 -> D4 -> D5-> D6 -> -> NA -> NA {LF} 
D7 -> D8 -> D9 -> D10 -> -> D12 ->NA -> NA -> NA {LF} 
D13 -> D14 -> D15 -> D16 -> D17-> D18 -> D19 -> D20 -> D21 {LF} 

感謝您的幫助。

回答

0

你是說你的數據本身包含一個標題行V1到V9。如果是,則跳過該行並讓R生成它自己的列向量,然後可以分別提供長度爲9的列向量。

要閱讀不等長的行使用這樣的東西。讓我們假設數據存儲在data.txt中在給定的形式

數據:

D1 D2 D3 D4 D5 D6 
D7 D8 D9 D10  D12 
D13 D14 D15 D16 D17 D18 D19 D20 D21 

RSCRIPT:

data<-read.table("data.txt",sep = "\t",fill = TRUE) 

這個「補」參數將墊缺失值,並給輸出爲:

輸出:

V1 V2 V3 V4 V5 V6 V7 V8 V9 
1 D1 D2 D3 D4 D5 D6    
2 D7 D8 D9 D10  D12    
3 D13 D14 D15 D16 D17 D18 D19 D20 D21 

瞭解如何自動生成標題向量。

如果您的數據不必要地包含行向量,可以使用「跳過」參數跳過它。

比方說:

數據:

V1 V2 V3 V4 V5 V6 V7 
D1 D2 D3 D4 D5 D6 
D7 D8 D9 D10  D12 
D13 D14 D15 D16 D17 D18 D19 D20 D21 

RSCRIPT:

data<-read.table("data.txt",sep = "\t",fill = TRUE,skip = 1) 

輸出將與上述相同。

您可以隨意添加列向量。

例如,你想要的列名:

"C1" "C2" "C3" "C4" "C5" "C6" "C7" "C8" "C9" 

做這樣的事情:

custom_colnames<-c("C1","C2","C3","C4","C5","C6","C7","C8","C9") 
colnames(data)<-custom_colnames 
+0

它是什麼,你到底需要。我的回答不是解決您的問題。你想再次闡述你的問題嗎? –

+0

謝謝,你的問題是正確的。但我仍然堅持。我試過這個: data < - read.table(「file_path/file_name」,sep =「\ t」,fill = T,skip = 1) 它導致的是一些記錄被破壞並溢出到下一行。輸出是這樣的: D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 D12 D13 D14 D15 D16 D17 D18 D19 D20 D21 (注:D21是第三行的一部分 - 它顯示爲第四記錄通知)。難道我做錯了什麼?感謝你的寶貴時間。 – user5305702

+0

看起來好像你做錯了什麼。您能確保D20和D21之間的分隔符恰好是一個製表符而不是新的換行符,只有換行符將數據推送到下一行。通過看到你的評論我不能看到實際的輸出。你可以編輯你原來的問題靜態試圖這個腳本產生這個結果,併發布結果作爲一個適當的格式化輸出。 –

相關問題