0

MATLAB では、誰かの専門知識が本当に必要です。次のようなcsvファイルがあります(余分なスペースは読みやすくするためです):

State,   Damage,    Blizzards,
Texas,   2,         2,
Alabama, 1,         0,
Alabama, 0,         1,
Texas,   5,         3,
Montana, 0,         8,
Arizona, 0,         0,
Arizona, 0,         1,
Texas,   8,         5,

textread と strcmpi を適用しました。目標は次のとおりです。状態に関連付けられたデータを使用して個々の状態を取得し、それを 1 つのプロットにプロットし、終了するまで状態ごとに繰り返すループを開発する必要があります。ループ 1 の場合: アラバマ州には 2 つのデータ セットがあるため、これを抽出してプロットする必要があります。ループ 2: テキサスには 3 つのデータ セットがあるため、これを抽出してプロットする必要があります。このプロセスは、すべての状態が適用されるまで繰り返されます。

コードは次のとおりです。

filename = 'datacollect.csv'
[State,Damage,Blizzards] = ...
textread(filename,'%s %d... %d','delimiter',',','headerlines',1);
index1 = strcmpi(State, 'Texas');
Damage = Damage(index1)
Blizzards = Blizzards(index1)
plot(Damage,Blizzards) %for Texas

ループを自動化しようとしているので、ハードコーディングする必要はありません。

私は本当に解決策が必要です-あなたが確信が持てなくても。

4

1 に答える 1

2

アムロの答えは間違いなくあなたを正しい方向に向けるはずですが、それでも問題が解決しない場合に備えて、完全な解決策を以下に示します。

%// Parse CSV file
[States, Damage, Blizzards] = textread(csvfilename, '%s %d %d', ...
    'delimiter', ',', 'headerlines', 1);

%// Parse data and store in an array of structs
[U, ix, iu] = unique(States);        %// Find unique state names
S = struct('state', U);              %// Create a struct for each state
for k = 1:numel(U)
    idx = (iu == k);                 %// Indices of rows matching current state
    S(k).damage = Damage(idx);       %// Add damage information
    S(k).blizzards = Blizzards(idx); %// Add blizards information
end

結果は、フィールド と を持つ構造体S配列です。statedamageblizzards

これで、この構造体の配列をループして、各反復で対応する構造体のフィールドにアクセスできます。たとえば、damageAlabama (2 番目の構造体) の値にアクセスするには、次のようにしますS(2).damage

お役に立てれば!

于 2013-05-09T16:15:50.037 に答える