2017-04-20 2 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]}}}} 

残念ながら、ループが(「アウト」という名前は、最後の列があります)データと出力行列が上書きされます。私はこれを克服する方法に関する提案に非常に感謝しています。私はループとしてベクトルを試してみてうれしく思います。これはおそらく最良の解決策ではありません。

多くの感謝!

+0

を行う必要があり、単に最初の行または2を言うためにあなたは、所望の出力を置くことができますか? – Gladwell

+0

はい、申し訳ありません。第1行:GH NA NA NA NA NA CD NA NA第2行:7 8 NA NA 9 10 NA NA 11 12 NA NA:第3行:2 D NA NA FR:入力ファイルの最初の3行の出力NA NA TG NA該当なし(フォーマットが不適切な場合にはお詫び申し上げます) – Tati

+0

@Tati - 投稿を編集してその情報を追加してください。コメントは読みにくいです。 – Parfait

答えて

1

out [、1]、data [、9] in out [、2]、data [、10] in out [、5]などのデータ[8]が正しく表示されます。

これは、それを明確にするために

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

関連する問題