我是一个主要是自学成才的新手程序员。我是MATLAB和关系数学的新手。目前,我正在尝试在行之间执行数学操作。我想通过相应的con
将exp
标准化,然后乘以常数。
此constant
是一种实验室测量,可能会在将来的经验中改变。因此,我给了它一个列。
下面是我生成的一些示例代码,以说明我的问题和解决方案。我正在尝试从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
由于您正在尝试获得仅阐述的表,因此将原始表分离为条件台上的且可拆卸。我假设您对每个EXP行都有一个条件行,并且表格中的信件(如果不是的话,则需要更多的处理),那么您可以简单地用一行表达式计算RVALUE。./是元素划分。另请注意,您可以使用"在MATLAB中执行转置(进一步请注意,如果您想要1:10的列向量,例如,您必须执行(1:10)',1:10',从1从1:10'开始将10解释为从1到10。