В этом примере показано, как добавить и удалить наблюдения в массиве набора данных. Можно также редактировать массивы набора данных с помощью редактора Переменных.
Импортируйте данные из первого листа в hospitalSmall.xlsx
в массив набора данных.
ds = dataset('XLSFile',fullfile(matlabroot,'help/toolbox/stats/examples','hospitalSmall.xlsx')); size(ds)
ans = 14 6
Массив набора данных, ds
, имеет 14 наблюдений (строки) и 6 переменных (столбцы).
Второй лист в hospitalSmall.xlsx
имеет дополнительные данные о пациентах. Добавьте наблюдения в этой электронной таблице в конец ds
.
ds2 = dataset('XLSFile',fullfile(matlabroot,'help/toolbox/stats/examples','hospitalSmall.xlsx'),'Sheet',2); dsNew = [ds;ds2]; size(dsNew)
ans = 22 6
Массив набора данных dsNew
имеет 22 наблюдения. В порядок для вертикального конкатенации двух массивов набора данных оба массива должны иметь одинаковое количество переменных с одинаковыми именами переменных.
Если вы хотите добавить новые наблюдения, хранящиеся в массиве ячеек, сначала преобразуйте массив ячеек в массив набора данных, а затем объедините массивы набора данных.
cellObs = {'id','name','sex','age','wgt','smoke'; 'YQR-965','BAKER','M',36,160,0; 'LFG-497','WALL' ,'F',28,125,1; 'KSD-003','REED' ,'M',32,187,0}; dsNew = [dsNew;cell2dataset(cellObs)]; size(dsNew)
ans = 25 6
Можно также добавить новые наблюдения, хранящиеся в структуре. Преобразуйте структуру в массив набора данных, а затем объедините массивы набора данных.
structObs(1,1).id = 'GHK-842'; structObs(1,1).name = 'GEORGE'; structObs(1,1).sex = 'M'; structObs(1,1).age = 45; structObs(1,1).wgt = 182; structObs(1,1).smoke = 1; structObs(2,1).id = 'QRH-308'; structObs(2,1).name = 'BAILEY'; structObs(2,1).sex = 'F'; structObs(2,1).age = 29; structObs(2,1).wgt = 120; structObs(2,1).smoke = 0; dsNew = [dsNew;struct2dataset(structObs)]; size(dsNew)
ans = 27 6
Использование unique
чтобы удалить любые наблюдения в массиве набора данных, которые дублируются.
dsNew = unique(dsNew); size(dsNew)
ans = 21 6
Одно дублированное наблюдение удаляется.
Удалите наблюдения 18, 20 и 21 из массива набора данных.
dsNew([18,20,21],:) = []; size(dsNew)
ans = 18 6
Массив набора данных имеет только 18 наблюдений сейчас.
Во-первых, укажите переменную идентификаторов, id
, как имена наблюдений. Затем удалите переменную id
от dsNew
. Можно использовать имя наблюдения для индексирования наблюдений.
dsNew.Properties.ObsNames = dsNew.id;
dsNew.id = [];
dsNew('KOQ-996',:) = [];
size(dsNew)
ans = 17 5
Массив набора данных теперь имеет на один меньше наблюдений и на один меньше переменных.
Можно также искать наблюдения в массиве набора данных. Для примера удалите наблюдения для любых пациентов с последним именем WILLIAMS
.
toDelete = strcmp(dsNew.name,'WILLIAMS');
dsNew(toDelete,:) = [];
size(dsNew)
ans = 16 5
cell2dataset
| dataset
| struct2dataset