根据其他列中以前的值在Matlab中显示值

根据其他列中以前的值在Matlab中显示值,matlab,dependencies,row,calculated-columns,Matlab,Dependencies,Row,Calculated Columns,我在Matlab中遇到以下问题: 我有一个包含几个列向量的表:日期、名称、结果 我的目标是创建另一个列向量(New vector),在每一行中显示前一天对应名称的结果 | Day | Name | Result | New Vector | |-----|------|--------|------------| | 1 | A | 1.2 | 0 | | 1 | C | 0.9 | 0 | | 1 | B | 0.7

我在Matlab中遇到以下问题:

我有一个包含几个列向量的表:日期、名称、结果 我的目标是创建另一个列向量(New vector),在每一行中显示前一天对应名称的结果

| Day | Name | Result | New Vector |
|-----|------|--------|------------|
| 1   | A    | 1.2    | 0          |
| 1   | C    | 0.9    | 0          |
| 1   | B    | 0.7    | 0          |
| 1   | D    | 1.1    | 0          |
| 2   | B    | 1      | 0.7        |
| 2   | A    | 1.5    | 1.2        |
| 2   | C    | 1.4    | 0.9        |
| 2   | D    | 0.9    | 1.1        |
| 3   | B    | 1.1    | 1          |
| 3   | C    | 1.3    | 1.4        |
| 3   | A    | 1      | 1.5        |
| 3   | D    | 0.3    | 0.9        |
例如,第5行:

这是第二天,名字是“B”。向量“结果”在同一行中显示1.0,但我想在新向量中显示的是前一天“B”(本例中为第1天)的结果值。 由于可以在前一天的第3行中找到“B”,因此结果值为0.7,应显示在我的新向量的第5行

当day等于1时,逻辑结果是没有值,因为没有前一天。因此,我希望在第1天为每行显示0

我已经尝试了一些unique的组合来获得索引和一些if子句,但根本不起作用,因为我对Matlab比较陌生,仍然非常困惑


有人能帮忙吗?非常感谢你

您的问题没有很好的定义,但下面的代码解决了您的问题

该代码的工作原理是按照名称的顺序对每天的信息进行内部排序。这允许通过简单地移动然后反转排序操作轻松创建新向量

close all; clear all; clc;

% A few column vectors
Day = [1;1;1;1;2;2;2;2;3;3;3;3];
Name = ['A';'C';'B';'D';'B';'A';'C';'D';'B';'C';'A';'D'];
Result = [1.2;0.9;0.7;1.1;1;1.5;1.4;0.9;1.1;1.3;1;0.3];

% Sort the table (so Name is in order for each Day)
[~,Index] = sort(max(Name)*Day + Name);
Day = Day(Index);
Name = Name(Index);
Result = Result(Index);

% Shift Result to get sorted NewVector
NewVector = circshift(Result, 4);
NewVector(1:4) = 0;

% Unsort NewVector, to get original table ordering
ReverseIndex(Index) = 1:length(Index);
NewVector = NewVector(ReverseIndex)
这将打印以下结果:

NewVector =

         0
         0
         0
         0
    0.7000
    1.2000
    0.9000
    1.1000
    1.0000
    1.4000
    1.5000
    0.9000

这听起来像是一个需要循环的解决方案。你尝试了什么?我已经编辑了我的原始帖子,请看一看。看来你的数据格式不太方便。如果您的
结果
值位于一个2d数组中,每天有一行,每个名称有一列,则会简单得多。然后您的练习将减少为在顶部添加0行并删除底部行。请注意,我希望保留此结构。移动这些值没有帮助,因为Y天的值顺序取决于X天的值顺序。很难提供帮助,因为您的问题没有很好的定义。我强烈建议你上传你的代码,不管它有多糟糕。你的描述不够充分。