如果我在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”匹配的行上方的行?
答案 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