2015-11-18 3 views
1

У меня есть структура 1x1 (ЭЭГ) с 42 полями. Одно из этих полей называется событием и является структурой 1x180 с 13 различными полями, некоторые из которых являются строками и некоторыми числовыми значениями.Удалить определенные строки из структуры

4-поле EEG.event является типа и он содержит строки (т.е. «Преображенского», «пред», «до», «тд», «ро», «PD»).

Я хотел бы сохранить только те строки структуры, которые содержат «preo» в столбце EEG.event.type.

Моя конечная цель - создать матрицу со всеми столбцами из структуры EEG.event и только строки с preo в EEG.event.type и другие столбцы из других переменных.

До сих пор я пытался:

S = struct2table(EEG.event); 

и правильно возвращает 180x13 таблицу. Однако я не смог выбрать только строки с 'preo' в типа. Я пробовал:

A= S(S.type=='preo', :); 

, и это дает мне ошибку:

Undefined operator '==' for input arguments of type 'cell'. 

Я также попытался:

array(strcmp(S(:, 4), 'preo'), :) = []; 

, и это дает мне эту ошибку:

Deletion requires an existing variable. 

Тогда Я подумал, что, может быть, я должен был преобразовать tabl e в матрицу, чтобы напрямую удалять строки из матрицы. Я пробовал:

B = cell2mat(S); 

но он возвращает эту ошибку:

Error using cell2mat (line 42) 
You cannot subscript a table using only one subscript. Table subscripting requires both row and variable subscripts. 

Любое предложение или наконечник можно только приветствовать, потому что я не знаю, как продолжить.

список

Примера что у меня есть (только 18 строк здесь):

13 1 201011 'preo' 2502 201 1 1 'y' 'h' 13 13.9230000000000 13 
14 1 201011 'pred' 2684 201 1 1 'y' 'h' 14 14.1049999960000 14 
15 1 201012 'to' 2707 201 1 2 'y' 'h' 15 14.1280000000000 15 
16 1 201012 'td' 2993 201 1 2 'y' 'h' 16 14.4140000000000 16 
17 1 201013 'po' 3019 201 1 3 'y' 'h' 17 14.4400000000000 17 
18 1 201013 'pd' 3383 201 1 3 'y' 'h' 18 14.8040000000000 18 
55 2 61011 'preo' 8213 61 1 1 'y' 'h' 55 53.9000000000000 55 
56 2 61011 'pred' 8522 61 1 1 'y' 'h' 56 54.2089999850000 56 
57 2 61012 'to' 8547 61 1 2 'y' 'h' 57 54.2340000000000 57 
58 2 61012 'td' 8834 61 1 2 'y' 'h' 58 54.5210000000000 58 
59 2 61013 'po' 8858 61 1 3 'y' 'h' 59 54.5450000000000 59 
60 2 61013 'pd' 9091 61 1 3 'y' 'h' 60 54.7780000000000 60 
85 3 124011 'preo' 13924 124 1 1 'y' 'h' 85 82.4550000000000 85 
86 3 124011 'pred' 14159 124 1 1 'y' 'h' 86 82.6899999990000 86 
87 3 124012 'to' 14181 124 1 2 'y' 'h' 87 82.7120000000000 87 
88 3 124012 'td' 14448 124 1 2 'y' 'h' 88 82.9790000000000 88 
89 3 124013 'po' 14470 124 1 3 'y' 'h' 89 83.0010000000000 89 
90 3 124013 'pd' 14713 124 1 3 'y' 'h' 90 83.2440000000000 90 

Примера список, который я хотел бы иметь (от 18 строк выше):

13 1 201011 'preo' 2502 201 1 1 'y' 'h' 13 13.9230000000000 13 
55 2 61011 'preo' 8213 61 1 1 'y' 'h' 55 53.9000000000000 55 
85 3 124011 'preo' 13924 124 1 1 'y' 'h' 85 82.4550000000000 85 
+0

dunno В какой список вы используете этот фильтр, можете ли вы предоставить конкретный пример. – Abra001

+0

@ Agawa001 Я просто добавил список того, что у меня есть, и то, что хотел бы получить. – dede

+0

Вы читали документы MATLAB под названием [_Создать таблицу из подмножества более крупной таблицы_] (http://www.mathworks.com/help/matlab/matlab_prog/access-data-in-a-table.html#bt1552e-1) ? Было бы полезно, если бы вы могли сохранить свою «таблицу» в файл '.mat', загрузить ее где-нибудь и разместить ссылку на нее здесь ...В противном случае я не вижу, как мы можем воспроизвести вашу проблему. –

ответ

1

Я нашел решение , Я размещаю его здесь для других с моей же проблемой.

Сначала создаю массив ячеек, а затем удаляю строки из массива ячеек. На данный момент это лучшее, что я могу придумать.

myCell= struct2cell(EEG.event); 
%it results in a 3d cell array, with the fields as first dimension (42) x a singleton dimension as second dimension x the number of the rows as third dimension (180) 
new_Cell = permute(myCell,[3,1,2]); 
%it deletes the singleton dimension and swap the other 2 dimensions, obtaining 180x42. 
[r,c] = find(strcmp(new_Cell,'preo')); 
%indices as rows (r) and columns (c) of cells with the string 'preo' 
y = new_Cell([r],:); 
%It keeps only the rows that you want from the original cell array 'myCell'. 
Смежные вопросы