您将如何基于多列执行行间操作?软件

How would you perform inter-row operations based on multiple columns? MATLAB

我是一名主要是自学成才的新手程序员。我是 MATLAB 和关系数学的新手。目前,我正在尝试在行之间执行数学运算。我想用相应的 conexp 进行归一化,然后乘以常数。

constant 是一项实验室测量,可能会在未来的实验中发生变化。因此,我给它一个专栏。

下面是我生成的一些示例代码,用于举例说明我的问题和解决方案。我正在尝试从 myTablerTable

我认识到我的解决方案非常草率,必须有一种方法来执行这些操作,该方法是人类可读的并且使用较少的临时变量。简而言之,必须有更简单的方法。

rTable = table();
myTable = table(transpose(1:8), ...
                transpose({'Con1', 'Con2', 'Exp1', 'Exp2',...
                           'Con1', 'Con2', 'Exp1', 'Exp2'}),...
                transpose({'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'}),...
                ones(8, 1) * 2,...
                'VariableNames', {'Values' , 'Condition', 'Group', 'Constant'});

[r, c] = size(myTable)

a = myTable(strcmp(myTable.Group, 'A'), :);
b = myTable(strcmp(myTable.Group, 'B'), :);

aexp1 = a.Values(strcmp(a.Condition, 'Exp1'), :) / a.Values(strcmp(a.Condition, 'Con1'), :) * mean(a.Constant);
aexp2 = a.Values(strcmp(a.Condition, 'Exp2'), :) / a.Values(strcmp(a.Condition, 'Con2'), :) * mean(a.Constant);

bexp1 = b.Values(strcmp(b.Condition, 'Exp1'), :) / b.Values(strcmp(b.Condition, 'Con1'), :) * mean(b.Constant);
bexp2 = b.Values(strcmp(b.Condition, 'Exp2'), :) / b.Values(strcmp(b.Condition, 'Con2'), :) * mean(b.Constant);

aT = table(transpose({aexp1, aexp2}),...
           transpose({'Exp1', 'Exp2'}),...
           transpose({'A', 'A'}),...
           transpose({2, 2,}),...
           'VariableNames', {'Values', 'Condition', 'Group', 'Constant'});

bT = table(transpose({bexp1, bexp2}),...
           transpose({'Exp1', 'Exp2'}),...
           transpose({'B', 'B'}),...
           transpose({2, 2,}),...
           'VariableNames', {'Values', 'Condition', 'Group', 'Constant'});

rTable = [aT; bT]

感谢您的任何意见或建议。也许,我正在处理的数据结构组织得不好。

这是一种解决方案:

rTable = table();
myTable = table((1:8)',{'Con1', 'Con2', 'Exp1', 'Exp2','Con1', 'Con2', 'Exp1', 'Exp2'}',...
    {'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'}','VariableNames', {'Values' , 'Condition', 'Group', 'Constant'})





conditionrows = contains(myTable.Condition,'Con')
exprows = contains(myTable.Condition,'Exp')
conditionTable = myTable(conditionrows,:)
expTable = myTable(exprows,:)

constant = 2
rValues = expTable.Values./conditionTable.Values * constant

rTable = expTable
rTable.Values = rValues

由于您试图获得仅包含表达式的 table,因此您将原始的 table 分成一个条件表和一个表达式表。我假设每个 exp 行都有一个条件行,并且你在 tables 中有很好的对应关系(如果不是,则需要更多处理),那么你可以简单地用一个计算 rValue线表达。 ./ 是按元素划分的。另请注意,您可以使用 ' 在 matlab 中执行转置(进一步注意,如果您想要 1:10 的列向量,例如您必须执行 (1:10)', 1:10' 给出你是从 1 到 10 的行向量,因为 1:10' 被解释为从 1 到 10 的转置向量。