【问题标题】:Matching rows in CSV data sets匹配 CSV 数据集中的行
【发布时间】:2013-05-09 15:36:30
【问题描述】:

在 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

试图让它成为一个循环,自动,所以我不必硬编码。

我真的需要一个解决方案——即使你不确定。

【问题讨论】:

  • 包含数据集的文件的名称是什么?你卡在哪里了?
  • 您是否已经将所有数据读入一个单元矩阵?
  • 是的。我已经应用了文本阅读。 [状态,伤害,暴风雪] = textread ....等。然后我使用 strcmpi 来提取我想要的字符串。 index1 = strcmpi(暴雪,'蒙大拿')。我试图不对每个状态进行硬编码,而是制作一个循环。
  • 发布您的代码。我建议你使用state= unique(data(:,1)),然后遍历状态并使用ismember 来查找行。
  • 其实我认为Amro在这里的回答几乎可以完全解决你的问题:stackoverflow.com/questions/16437937/concatenate-every-n-th-row/…

标签: matlab loops csv cell import-from-csv


【解决方案1】:

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

生成的Sstructs 的数组,其中包含statedamageblizzards 字段。

现在您可以遍历这个结构数组,在每次迭代中访问相应结构的字段。例如,要访问 Alabama(第二个结构)的 damage 值,您可以使用 S(2).damage

希望这会有所帮助!

【讨论】:

  • 谢谢。我一直在研究很多关于 stackoverflow 的文章(我会阅读链接以增加我的理解)......真的我花了几天时间。我真的很感激。
  • @user1608954 很高兴为您提供帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-06
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 2019-09-28
  • 2013-03-15
相关资源
最近更新 更多