0

我有带有字段的 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.

有谁知道如何删除特定行?

4

3 回答 3

0

更改循环以向后迭代数组,首先删除最后的元素:

for b = length(EEG.event):-1:1
   ...
于 2016-03-26T16:17:40.410 回答
0

您遇到的基本问题是您正在修改您尝试循环的相同结构数组。这通常是一个坏主意,会导致您看到的问题。

最简单的方法是将event.type所有结构的字段实际转换为元胞数组,并strcmp同时使用它们来构造一个逻辑矩阵,您可以使用该矩阵索引EEG.event来获取您关心的条目。

您可以type像这样将所有值放在一个单元格数组中

types = {EEG.event.type};

然后通过查找“边界”的事件类型来创建您的逻辑数组

isBoundary = strcmp(types, 'boundary');

并获得这样的EEG.event条目子集。

boundaryEvents = EEG.event(isBoundary);

如果您想要类型不是“边界”或“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));
于 2016-03-26T12:44:20.433 回答
0

谢谢大家的回答!

这条直接的代码行完成了这项工作:

[ EEG.event( strcmp( 'boundary', { EEG.event.type } ) | strcmp( 'R  1', { EEG.event.type } ) ) ] = [];

干杯!

于 2016-03-29T09:52:25.760 回答