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。这是目标:我需要开发一个循环来获取每个单独的状态以及与状态相关的数据,并将其绘制在一个图上,并为每个状态重复直到完成。所以对于循环一:阿拉巴马州有两个数据集,所以我需要提取和绘制这个。循环二:得克萨斯州有 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

Amro 的回答绝对应该为您指明正确的方向,但如果您仍然遇到问题,以下是为您说明的完整解决方案:

%// 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(第二个结构)的值,您可以执行S(2).damage.

希望这可以帮助!

于 2013-05-09T16:15:50.037 回答