根据字段条目删除struct array matlab中的整行
Delete entire rows in struct array matlab depending on field entry
我有 1x1008 结构数组 EEG.event 和字段
latency
duration
channel
bvtime
bvmknum
type
code
urevent
我想删除在字段 EEG.event.type = 'boundary' 或 'R 1'
中输入的所有行
我尝试了以下循环:
for b = 1:length(EEG.event)
if strcmp(EEG.event(b).type, 'boundary')
EEG.event(b) = [];
elseif strcmp(EEG.event(b).type, 'R 1')
EEG.event(b) = [];
end
end
这当然行不通,因为计数变量 b
在某些时候超过了 EEG.event
的长度。
有谁知道如何删除特定行?
您遇到的根本问题是,您修改的结构数组与您尝试循环的结构数组相同。这通常是个坏主意,会导致您遇到的问题。
最简单的方法是将所有结构的 event.type
字段实际转换为元胞数组,并同时对所有结构使用 strcmp
来构造一个逻辑矩阵,您可以用于索引 EEG.event
以获取您关心的条目。
您可以像这样将所有 type
值放入元胞数组中
types = {EEG.event.type};
然后通过查找 'boundary'
的事件类型来创建逻辑数组
isBoundary = strcmp(types, 'boundary');
并像这样获取 EEG.event
个条目的子集。
boundaryEvents = EEG.event(isBoundary);
如果您想要一部分类型不是 'boundary' 或 'R 1' 的事件,则可以通过这种方式获取该子集。
isBoundary = strcmp(types, 'boundary');
isR1 = strcmp(types, 'R 1');
% Keep the entries that aren't boundary or R1 types
events_to_use = EEG.event(~(isBoundary | isR1));
将循环更改为向后遍历数组,首先删除末尾的元素:
for b = length(EEG.event):-1:1
...
感谢大家的回答!
这行简单的代码完成了工作:
[ EEG.event( strcmp( 'boundary', { EEG.event.type } ) | strcmp( 'R 1', { EEG.event.type } ) ) ] = [];
干杯!
我有 1x1008 结构数组 EEG.event 和字段
latency
duration
channel
bvtime
bvmknum
type
code
urevent
我想删除在字段 EEG.event.type = 'boundary' 或 'R 1'
中输入的所有行我尝试了以下循环:
for b = 1:length(EEG.event)
if strcmp(EEG.event(b).type, 'boundary')
EEG.event(b) = [];
elseif strcmp(EEG.event(b).type, 'R 1')
EEG.event(b) = [];
end
end
这当然行不通,因为计数变量 b
在某些时候超过了 EEG.event
的长度。
有谁知道如何删除特定行?
您遇到的根本问题是,您修改的结构数组与您尝试循环的结构数组相同。这通常是个坏主意,会导致您遇到的问题。
最简单的方法是将所有结构的 event.type
字段实际转换为元胞数组,并同时对所有结构使用 strcmp
来构造一个逻辑矩阵,您可以用于索引 EEG.event
以获取您关心的条目。
您可以像这样将所有 type
值放入元胞数组中
types = {EEG.event.type};
然后通过查找 'boundary'
的事件类型来创建逻辑数组isBoundary = strcmp(types, 'boundary');
并像这样获取 EEG.event
个条目的子集。
boundaryEvents = EEG.event(isBoundary);
如果您想要一部分类型不是 'boundary' 或 'R 1' 的事件,则可以通过这种方式获取该子集。
isBoundary = strcmp(types, 'boundary');
isR1 = strcmp(types, 'R 1');
% Keep the entries that aren't boundary or R1 types
events_to_use = EEG.event(~(isBoundary | isR1));
将循环更改为向后遍历数组,首先删除末尾的元素:
for b = length(EEG.event):-1:1
...
感谢大家的回答!
这行简单的代码完成了工作:
[ EEG.event( strcmp( 'boundary', { EEG.event.type } ) | strcmp( 'R 1', { EEG.event.type } ) ) ] = [];
干杯!