在Matlab中的表格中找到上一行的索引

时间:2018-09-18 15:31:48

标签: matlab

如果我在Matlab中有下表:

T = table(['KAT';'MAT';'PAT';'SAT';'RAT'],[38;43;38;40;49],[71;69;64;67;64],[176;163;131;133;119])


T =

  5×4 table

    Var1    Var2    Var3    Var4
    ____    ____    ____    ____

    KAT      38      71     176 
    MAT      43      69     163 
    PAT      38      64     131 
    SAT      40      67     133 
    RAT      49      64     119

如何引用PAT上方的整个行。

例如,以下代码查找与PAT匹配的行

>> T((ismember(T.Var1,'PAT','rows')),:)

ans =

  1×4 table

    Var1    Var2    Var3    Var4
    ____    ____    ____    ____

    PAT      38      64     131 

但是当我在索引中扣除1以找到匹配的行上方的“ PAT”行时,出现以下错误:

>> T((ismember(T.Var1,'PAT','rows')-1),:)
Index in position 1 is invalid. Array
indices must be positive integers or logical
values.

有什么办法可以找到与“ PAT”匹配的行上方的行?

1 个答案:

答案 0 :(得分:5)

您的ismember的输出是向量[0 0 1 0 0]'。如果从中减去一个,则会得到[-1 -1 0 -1 -1]',这不是有效的索引。一个简单的解决方案是使用find然后减去1。

T((find(ismember(T.Var1, 'PAT', 'rows'))-1), :)

ans = 

    Var1    Var2    Var3    Var4

    ____    ____    ____    ____

    MAT     43      69      163 

find返回非零元素的索引。

另一种选择是使用circshift移动向量中的元素。

T(circshift(ismember(T.Var1, 'PAT', 'rows'),-1), :)

ans = 

    Var1    Var2    Var3    Var4
    ____    ____    ____    ____

    MAT     43      69      163