Deleting the i-th entry from all fields of a struct

조회 수: 7 (최근 30일)
Daniel Underwood
Daniel Underwood 2011년 4월 2일
I'm using a struct to hold data on a large sample of patients. Each field corresponds to an attribute or property of the patients. There are some patients whom I wish to remove from the dataset (from the struct). How can I do this?
For example, suppose I wish to remove the i-th patient from the struct. This means I need to delete the i-th values from each field of the struct. I don't know how to do that.
Here is how I'm creating my struct (from a 135737x11 matrix "M"):
patients = struct( 'id', M(:,11), ...
'PSAtests', M(:,1), ...
'PSAestimate', M(:,3), ...
'PSA', M(:,10), ...
'isActual', 1-M(:,4), ...
'age', M(:,5), ...
'cancer', M(:,6), ...
'cancerAge', M(:,7), ...
'biopsy', M(:,8), ...
'biopsyAge', M(:,9) );
Ideally, if I wished to remove all patients over the age of 80, I could do so by something like the following:
patients(patients.age>80) = []
Any ideas? Or if I'm going about this the wrong way, please suggest an alternative data handling strategy. I welcome any comments.

채택된 답변

Daniel Underwood
Daniel Underwood 2011년 4월 5일
For the answer to this question, see the answer to the following question:

추가 답변 (1개)

David Young
David Young 2011년 4월 2일
Have a look at the section in the manual on "Organizing Data in Structure Arrays", also available here.
You can change the organisation of your data to element-by-element, which probably makes sense for a collection of patient records, by creating an array of structures like this:
for k = 1:size(M,1)
patients(k) = struct( ...
'id', M(k,11), ...
'PSAtests', M(k,1), ...
'PSAestimate', M(k,3), ...
'PSA', M(k,10), ...
'isActual', 1-M(k,4), ...
'age', M(k,5), ...
'cancer', M(k,6), ...
'cancerAge', M(k,7), ...
'biopsy', M(k,8), ...
'biopsyAge', M(k,9) );
end
Then you can delete a set of records with a small modification of your proposed command:
patients([patients.age] > 80) = [];
(Note the square brackets.)
If you want to retain your existing data structure (perhaps to save memory), then I think that to delete a patient you have to write a loop which deletes the entry from each array in the structure in turn.

카테고리

Help CenterFile Exchange에서 Structures에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by