2017-04-20 123 views
1

I`ve得到了下面的文件10行和13列(作爲一個例子,真實文件要大得多):雙迴路輸出到一個矩陣

ID1 A B C D E F G H A B C D 
ID2 1 2 3 4 5 6 7 8 9 10 11 12 
ID3 A B 1 2 C 1 2 D F R T G 
... 

我需要創建一個新的矩陣,輸入文件的8-13列放置在每4列(也有一個條件,但工作正常;問題是循環覆蓋輸出)。這裏是循環腳本:

data=read.table("input file", h=T) 
out=matrix("NA",10,12) 
for(i in c(1:10)){ 
for(k in seq(8,13,2){ 
for(s in seq(1,12,4){ 
for(q in seq(2,12,4){ 
out[i,s]=data[i,k] 
out[i,q]=data[i,k+1]}}}} 

不幸的是,循環覆蓋數據和輸出矩陣(命名爲「out」只有最後一列)。對於如何克服這個問題的任何建議,我將非常感激。我很樂意嘗試向量作爲循環可能不是最好的解決方案。

非常感謝!

+0

爲清楚起見,你可以把所需的輸出爲說正好位於第一行還是兩個? – Gladwell

+0

是的,對不起。這是輸入文件前3行所需的輸出:第一行:GH NA NA AB NA NA CD NA NA第二行:7 8 NA NA 9 10 NA NA 11 12 NA NA第三行:2 D NA NA FR不適用不適用不適用不適用(歉意格式不佳) – Tati

+0

@Tati - 請編輯您的文章以包含該信息。評論很難閱讀。 – Parfait

回答

1

如果我的理解正確,您希望out [,1]中的數據[,8],out [,2]中的數據[,9],out [,5]中的數據[,10]等

這應該這樣做

out <- matrix(NA, nrow = nrow(data), ncol = 12) 
out[, sort(c(seq(1,9,4), seq(2,10,4)))] <- data[, seq(8, 13)] 
+0

是的,你正確理解我。非常感謝!我很抱歉編輯不好。今天是我使用這個網站的第一天。非常感謝您的幫助! – Tati

+0

@Tati沒問題。不要忘記將答案標記爲未來提問者的正確答案。 – Gladwell