2016-08-19 4 views
0

私は本当にmatlabで錆びています。私は後で平均化するためにデータを保存するためにいくつかの単純なループを作ろうとしています。 、

日、秒、椅子、テーブル
1、1.4、38、54
2、0、45、72
3、1、37:簡単にするために、のは、私はこのデータをCVSファイルを持っているとしましょう私はすべての日のために椅子、テーブルと秒を行の残りの部分を含む、ビンに1日のすべての発生を引き出し、そしてその後平均する60
1、0、45、72
Matlab:後で平均化してプロットするデータを格納する単純なループ

1s。

私は現在、私がcsvファイルを開いた後のコードですが、私の 'if'ループは読んでいません。

day= data(:,1); 
sec= data(:,2); 
chair= data(:,3); 
table= data(:,4); 

for m = 1:length(data); 
    if day==1; 
     sec1(:,1)=sec(:,1); 
     chair1(:,1)= chair(:,1); 
     table1(:,1)= data(:,1); 
    end 
end 

はまた、私はループ内のデータを収集する必要があります知っているが、再びどのように忘れてしまった、と私は、ルックアップしようとしている例が助けていません。何か案は?

+0

あなたは定数 '1'に対して、配列である 'day'を、テストしているを示します。おそらく 'day(m)== 1'のようなものが必要です...また、' length(data) 'は最大次元のサイズを返します。より堅牢なアプローチは、代わりに 'size(data、1)'を使うことです。 – jodag

+0

ああ - 日(m)== 1を使う方がずっと良いです。ありがとうございました!サイズと長さに関するアドバイスをいただき、ありがとうございます。私はそれを差し込んで、それは今2番目のループを実行しています。今私はビンsec1、chair1とtable1に正しいコードを取得しようとしています。現在のところ、それは各変数のすべての発生を保存しています。その日は1日だけではありません。 – Lauren5

+0

2つの異なる方法で回答を追加しました。 – jodag

答えて

0

このサンプルコードでは、あなたの間違いと思われるものを修正しています。

data = [1 1.4 38 54; ... 
     2 0 45 72; ... 
     3 1 37 60; ... 
     1 0 45 72]; 

day= data(:,1); 
sec= data(:,2); 
chair= data(:,3); 
table= data(:,4); 

sec1 = []; 
chair1 = []; 
table1 = []; 

for m = 1:size(data,1); 
    if day(m)==1; 
     sec1(end+1,1)=sec(m,1); 
     chair1(end+1,1)= chair(m,1); 
     table1(end+1,1)= data(m,1); 
    end 
end 

以下がより凝縮形で同じ結果

data = [1 1.4 38 54; ... 
     2 0 45 72; ... 
     3 1 37 60; ... 
     1 0 45 72]; 

day= data(:,1); 
sec= data(:,2); 
chair= data(:,3); 
table= data(:,4); 

sec1 = sec(day==1,1); 
chair1 = chair(day==1,1); 
table1 = table(day==1,1); 
関連する問題