2014-09-21 19 views
0

我有一個問題在於R.R:號碼在一個txt文件分割由線

讀取一個.txt的數據是這樣的:

68 89 103 1 

37 8 103 9 

78 93 8 12 

3 50 

我使用的readLine()在R中,並提出了一個清單。但是,當我將它與原始數據進行比較時,例如,我發現第一行中的最後一個「1」不是1,它應該連接到第二行,這使得數字爲e 137,而不是1 37.我認爲這些數據被「」分割。如果我使用readLine(),我手動分割線。我怎麼能正確讀取它? 而且,從第3行開始,號碼9不連接到78,因此存在空間。編號12連接3以形成123,因爲之前沒有空格3.

謝謝。我甚至不知道如何在Google中搜索我的問題。不知道如何表達它。

182 63 68 152 130 134 145 152 98 152 182 88 95 105 130 137 167 152 81 71 84 126 134 152 116 130 91 63 68 84 95 152 105 152 63 
102 152 63 77 112 140 77 119 152 161 167 105 112 145 161 182 152 81 95 84 91 102 108 130 134 91 

1 2 1 4 3 6 1 1 5 2 1 5 2 3 4 5 5 1 2 6 1 

63 102 119 161 161 172 179 88 91 95 105 112 119 119 137 145 167 172 91 98 108 112 134 137 161 161 179 71 174 95 105 134 134 1 
37 140 145 150 150 68 68 130 137 77 95 112 137 161 174 81 84 126 134 161 161 174 68 77 98 102 102 102 112 88 88 91 98 112 134 
134 137 137 140 140 152 152 77 179 112 71 71 74 77 112 116 116 140 140 167 77 95 126 150 88 126 130 130 134 63 74 84 84 88 9 
1 95 108 134 137 179 81 88 105 116 123 140 145 152 161 161 179 88 95 112 119 126 126 150 157 179 68 68 84 102 105 119 123 123 
137 161 179 182 140 152 182 182 81 63 88 134 84 134 182 


7 11 9 2 9 4 6 7 6 1 13 2 1 10 4 5 11 11 9 12 1 3 1 3 3 

基本上,我現在正在做是: 例如,向量:

ind <- c(7, 11, 9, 2 ,9 ,4 ,6, 7, 6 ,1, 13, 2 ,1 ,10 ,4 ,5 ,11 ,11, 9 ,12, 1, 3 ,1, 3 ,3) 

指示數目的塊的上方應根據由所述矢量指定的長度被分開。我知道我可以分開一個載體

split(vector, rep(1:length(ind), ind)) 

但是,問題是我無法正確讀取編號的塊。

+0

我的數據複製在代碼編輯器。我認爲這是你可以看到的形狀。沒有辦法使用read.table() – 2014-09-21 23:58:20

+0

這是一個txt文件。我沒有試過掃描()。我現在將檢查功能。 – 2014-09-22 00:04:17

+0

我試圖使用scan(),但它自動按\ n和「」分割。我不希望作爲分裂的空間。 – 2014-09-22 00:20:54

回答

0

根據您所描述的條件,即在readLines讀取文件後,如果在行首有space,則上一行中的最後一個數字應與當前行的第一個數字連接。

使用你的第二個例子(我不明白ind雖然)

lines1 <- readLines(n=10) 
182 63 68 152 130 134 145 152 98 152 182 88 95 105 130 137 167 152 81 71 84 126 134 152 116 130 91 63 68 84 95 152 105 152 63 
102 152 63 77 112 140 77 119 152 161 167 105 112 145 161 182 152 81 95 84 91 102 108 130 134 91 

1 2 1 4 3 6 1 1 5 2 1 5 2 3 4 5 5 1 2 6 1 

63 102 119 161 161 172 179 88 91 95 105 112 119 119 137 145 167 172 91 98 108 112 134 137 161 161 179 71 174 95 105 134 134 1 
37 140 145 150 150 68 68 130 137 77 95 112 137 161 174 81 84 126 134 161 161 174 68 77 98 102 102 102 112 88 88 91 98 112 134 
134 137 137 140 140 152 152 77 179 112 71 71 74 77 112 116 116 140 140 167 77 95 126 150 88 126 130 130 134 63 74 84 84 88 9 
1 95 108 134 137 179 81 88 105 116 123 140 145 152 161 161 179 88 95 112 119 126 126 150 157 179 68 68 84 102 105 119 123 123 
137 161 179 182 140 152 182 182 81 63 88 134 84 134 182 

lines2 <- lines1[lines1!=''] #remove blank lines 
indx <- grep("^ ", lines2) #create a numeric index for lines that start with a space 
indx1 <- indx-1 #index that is one above the previous `indx` 
lines2[indx1] <- paste0(lines2[indx1], gsub("^\\s+", "", lines2[indx])) #paste the lines together using the two indexes 
lines3 <- lines2[-indx] #remove the lines that belong to the first index 

lines3 
#[1] "182 63 68 152 130 134 145 152 98 152 182 88 95 105 130 137 167 152 81 71 84 126 134 152 116 130 91 63 68 84 95 152 105 152 63102 152 63 77 112 140 77 119 152 161 167 105 112 145 161 182 152 81 95 84 91 102 108 130 134 91"        
#[2] "1 2 1 4 3 6 1 1 5 2 1 5 2 3 4 5 5 1 2 6 1"                                                     
#[3] "63 102 119 161 161 172 179 88 91 95 105 112 119 119 137 145 167 172 91 98 108 112 134 137 161 161 179 71 174 95 105 134 134 1"                                
#[4] "37 140 145 150 150 68 68 130 137 77 95 112 137 161 174 81 84 126 134 161 161 174 68 77 98 102 102 102 112 88 88 91 98 112 134134 137 137 140 140 152 152 77 179 112 71 71 74 77 112 116 116 140 140 167 77 95 126 150 88 126 130 130 134 63 74 84 84 88 9" 
#[5] "1 95 108 134 137 179 81 88 105 116 123 140 145 152 161 161 179 88 95 112 119 126 126 150 157 179 68 68 84 102 105 119 123 123137 161 179 182 140 152 182 182 81 63 88 134 84 134 182"