MATLAB / EXCEL中的表分段,数据缩减,排序和写入

时间:2017-02-06 00:55:52

标签: excel matlab

我想在电子表格上进行数据缩减操作。最好我想使用MATLAB /(或excel),因为我需要为每种情况单独输出文件。

电子表格的链接位于

之下

Spreadsheet

电子表格的屏幕截图如下 Spreadsheet DAta

我在文本文件中需要的输出如下所示 Output .xls文件中的第一个工作表是主要输入。以下表(d **)是我要求的输出。我还需要在单独的ASCII文件(.dat)中使用这些工作表来绘制下摆。以下是算法的工作原理

  1. 查找B列(FileName)
  2. 中的数字/字符串
  3. 使用相同的FileName值(B列)提取C列和D列(饱和度和ETC)中的所有数据
  4. 在列E(ImageIndex)中查找匹配的FileName(列B)值。
  5. 将ImageName(列F)的值复制到Image(IndexColumn E)中的相应值
  6. 结果将是三列(ImageName,Saturation,ETC)。每个子案例的ImageName都相同
  7. 根据饱和度
  8. 对列进行排序
  9. 将每个子案例写为单独的.dat文件
  10. 我尝试在MATLAB中使用分类数组(findgroups和splitapply)使用一些配方。似乎没有为我工作。我稍后会处理更大的数据集,因此需要自动化。我认为这可以在excel上使用宏来完成,但我更喜欢使用MATLAB,因为我会使用MATLAB来绘制数据。欢迎提出任何其他建议

    谢谢,

1 个答案:

答案 0 :(得分:0)

这是一个Matlab解决方案。你可以通过一个相当复杂的accumarray调用来做到这一点,但是可读性会相当糟糕,所以我在这里选择了一个循环。

out是一种可用于写入文件或绘制数据的结构。

tbl = readtable('yourFile.xls');

%# get the group indices for the files
%# this assumes that you have cleaned up the dash after the 1
%# so that all of the entries in the FileName column are numeric
idx = tbl.FileName;

%# the uIdx business is to account for the possibility
%# that there are images missing from the sequence
uIdx = unique(idx);
nImages = length(uIdx);

%# preassign output structure
out(1:nImages) = struct('name','','saturation',0,'etc',0);

%# loop to extract relevant information
for iImage = uIdx(:)'
   myIdx = idx==iImage;
   data = tbl(myIdx,{'Saturation','ETC'});
   data = sortrows(data,'Saturation');
   name = tbl.ImageName{tbl.ImageIdx==iImage};

   out(iImage==uIdx).name = name;
   out(iImage==uIdx).saturation = data.Saturation;
   out(iImage==uIdx).etc= data.ETC;
end

%# plotting
for iImage = 1:nImages
    figure('name',out(iImage).name)
    plot(out(iImage).saturation, out(iImage).etc,'.');
end