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