如果我在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
Run Code Online (Sandbox Code Playgroud)
我如何参考PAT上方的整行.
例如,下面的代码找到与PAT匹配的行
>> T((ismember(T.Var1,'PAT','rows')),:)
ans =
1×4 table
Var1 Var2 Var3 Var4
____ ____ ____ ____
PAT 38 64 131
Run Code Online (Sandbox Code Playgroud)
但是当我在索引中扣除1以找到'PAT'匹配行上方的行时,我得到以下错误:
>> T((ismember(T.Var1,'PAT','rows')-1),:)
Index in position 1 is invalid. Array
indices must be positive integers or logical
values.
Run Code Online (Sandbox Code Playgroud)
有没有什么办法可以找到上面那行匹配'PAT'的行?
你的输出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
Run Code Online (Sandbox Code Playgroud)
find 返回非零元素的索引.
另一种选择是用于circshift移动向量中的元素.
T(circshift(ismember(T.Var1, 'PAT', 'rows'),-1), :)
ans =
Var1 Var2 Var3 Var4
____ ____ ____ ____
MAT 43 69 163
Run Code Online (Sandbox Code Playgroud)