В этом примере показано, как добавить и удалить наблюдения в массиве набора данных. Можно также отредактировать массивы набора данных с помощью редактора Переменных.
Импортируйте данные из первого рабочего листа в 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