在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。这是目标:我需要开发一个循环,使每个状态获得与状态相关的数据并将其绘制在一个图上,并为每个状态重复直到完成。所以对于循环一:Alabama有两个数据集,所以我需要这个提取和绘制。循环二:德克萨斯州有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
尝试将其设为循环,自动,因此我不必对其进行硬编码。
我真的需要一个解决方案 - 即使你不确定。
答案 0 :(得分:2)
Amro's answer绝对应该指出你正确的方向,但是这里有完整的解决方案,如果你仍然遇到麻烦:
%// 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
是一个structs数组,其中包含state
,damage
和blizzards
字段。
现在,您可以循环遍历此结构数组,在每次迭代中访问相应结构的字段。例如,要访问Alabama(第二个结构)的damage
值,您可以执行S(2).damage
。
希望这有帮助!