MATLAB / EXCEL中的表格分割,数据缩减,sorting和写入

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

下面是电子表格的链接

电子表格

电子表格的屏幕截图如下 电子表格DATA

我在文本文件中需要的输出如下所示 产量 .xls文件中的第一张是主input。 以下表(d **)是我的要求输出。 我还需要在一个单独的ASCII文件(.dat)中绘制这些表格,以便稍后进行平铺。 这是algorithm的工作原理

  1. 查找列B(FileName)中的数字/string
  2. 使用相同的FileName值(列B)提取列C和D(饱和度和ETC)中的所有数据
  3. 在列E(ImageIndex)中查找匹配的FileName(Column B)值。
  4. 将ImageName(F列)的值复制到图像中对应的值(IndexColumn E)
  5. 结果将是三列(ImageName,Saturation,ETC)。 ImageName对于每个子情况都是相同的
  6. 根据饱和度对列进行sorting
  7. 写每个子情况作为一个单独的.dat文件

我尝试在MATLAB中使用几个食谱使用分类数组(findgroups和splitapply)。 似乎没有为我工作。 我稍后将在一个更大的数据集上工作,所以自动化是必要的。 我认为这可以在Excel中使用macros来完成,但我更喜欢使用MATLAB,因为我将使用MATLAB绘制数据。 欢迎任何其他的build议

谢谢,

这是一个Matlab解决scheme。 你可以用一个相当复杂的accumarray调用来做到这accumarray ,但可读性将会非常糟糕,所以我在这里select了一个循环。

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