我有一个类似于
的数据表Construct Stain Position Value
VinTL FAK 0 - 0.1 4
VinTL ABD 0 - 0.1 2
VinTL FAK 0 - 0.2 1
VinTL ABD 0 - 0.2 5
VinTS ABD 0 - 0.1 7
VinTS FAK 0 - 0.2 3
VinTS ABD 0 - 0.2 9
VinTS FAK 0 - 0.1 8
我想在某个位置取每个染色(例如:染色是FAK,位置是0 - 0.1)并在VinTL的构造中找到值。然后在相同位置取相同的Stain并在VinTS的Construct处找到该值。然后我想从第二个值中减去第一个值并创建一个新表。例如,该表的输出为
Stain Position New_Value
FAK 0 - 0.1 -4
FAK 0 - 0.2 -2
ABD 0 - 0.1 -5
ABD 0 - 0.2 -4
实际的数据表会有更多的污点和更多的位置。 Stain,Position,Construct的每个组合都是独一无二的。
答案 0 :(得分:0)
如果您的所有数据都在表格中,您可以执行以下操作:
% convert all reapeating data to categorical arrays:
data.Construct = categorical(data.Construct);
data.Stain = categorical(data.Stain);
data.Position = categorical(data.Position);
% find all 'VinTS' value and change them to negative:
VinTS_ind = data.Construct=='VinTS';
data.Value(VinTS_ind) = -data.Value(VinTS_ind);
% find all unique rows in 'Stain' & 'Position',
% and sum all thier instances:
[new_table,~,ci] = unique(data(:,2:3));
new_table.new_value = accumarray(ci,data.Value)
结果:
new_table =
4×3 table
Stain Position new_value
_____ ________ _________
ABD 0 - 0.1 -5
ABD 0 - 0.2 -4
FAK 0 - 0.1 -4
FAK 0 - 0.2 -2
顺便说一下,你写的是你想要从第二个值中减去第一个值,但在你的例子中,你做了相反的事情。我在我的建议中遵循了这个例子。