我想在电子表格上进行数据缩减操作。最好我想使用MATLAB /(或excel),因为我需要为每种情况单独输出文件。
电子表格的链接位于
之下我在文本文件中需要的输出如下所示 .xls文件中的第一个工作表是主要输入。以下表(d **)是我要求的输出。我还需要在单独的ASCII文件(.dat)中使用这些工作表来绘制下摆。以下是算法的工作原理
我尝试在MATLAB中使用分类数组(findgroups和splitapply)使用一些配方。似乎没有为我工作。我稍后会处理更大的数据集,因此需要自动化。我认为这可以在excel上使用宏来完成,但我更喜欢使用MATLAB,因为我会使用MATLAB来绘制数据。欢迎提出任何其他建议
谢谢,
答案 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