如何基于多列执行行间操作?MATLAB

如何基于多列执行行间操作?MATLAB,matlab,matlab-table,Matlab,Matlab Table,我是一个新手程序员,主要是自学。我不熟悉MATLAB和关系数学。目前,我正在尝试在行之间执行数学运算。我想通过相应的con标准化exp,然后乘以常数 该常数是一种实验室测量值,在未来的实验中可能会发生变化。因此,我给了它一个专栏 下面是我生成的一些示例代码,以举例说明我的问题和解决方案。我正在尝试从myTable获取到rTable 我认识到我的解决方案非常草率,必须有一种方法来执行这些操作,它是人类可读的,并且使用较少的临时变量。简而言之,必须有一种更简单的方法 rTable = table()

我是一个新手程序员,主要是自学。我不熟悉MATLAB和关系数学。目前,我正在尝试在行之间执行数学运算。我想通过相应的
con
标准化
exp
,然后乘以常数

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

下面是我生成的一些示例代码,以举例说明我的问题和解决方案。我正在尝试从
myTable
获取到
rTable

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

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
由于您试图获取一个只包含exprows的表,所以将原始表分为条件表和expTable。我假设每个exp行有一个条件行,并且表中有良好的对应关系(如果没有,则需要更多的处理),那么您可以使用一行表达式简单地计算右值。/是按元素划分的。还请注意,您可以使用“在matlab中执行转置”(进一步注意,如果您想要一个1:10的列向量,例如,您必须执行(1:10)”,1:10'将为您提供一个从1到10的行向量,因为1:10'被解释为从1到10的转置向量