Примечание
The dataset
тип данных не рекомендуется. Для работы с неоднородными данными используйте MATLAB®
table
вместо этого тип данных. См. MATLAB table
документация для получения дополнительной информации.
Создайте массив набора данных из Текстового файла с разделителями табуляции
Создайте массив набора данных из разделенного запятыми текстового файла
В этом примере показано, как создать массив набора данных из содержимого текстового файла с разделителями табуляции.
Создайте массив набора данных с помощью настроек по умолчанию.
Импортируйте текстовый файл hospitalSmall.txt
как массив набора данных с использованием настроек по умолчанию.
ds = dataset('File',fullfile(matlabroot,'help/toolbox/stats/examples','hospitalSmall.txt'))
ds = name sex age wgt smoke 'SMITH' 'm' 38 176 1 'JOHNSON' 'm' 43 163 0 'WILLIAMS' 'f' 38 131 0 'JONES' 'f' 40 133 0 'BROWN' 'f' 49 119 0 'DAVIS' 'f' 46 142 0 'MILLER' 'f' 33 142 1 'WILSON' 'm' 40 180 0 'MOORE' 'm' 28 183 0 'TAYLOR' 'f' 31 132 0 'ANDERSON' 'f' 45 128 0 'THOMAS' 'f' 42 137 0 'JACKSON' 'm' 25 174 0 'WHITE' 'm' 39 202 1
По умолчанию dataset
использует первую строку текстового файла для имен переменных. Если первая строка не содержит имен переменных, можно задать необязательный аргумент пары "имя-значение" 'ReadVarNames',false
для изменения поведения по умолчанию.
Массив набора данных содержит неоднородные переменные. Переменные id
, name
, и sex
являются массивами ячеек векторов символов, а другие переменные являются числовыми.
Результирующие массивы набора данных.
Вы можете увидеть тип данных и другую описательную статистику для каждой переменной при помощи summary
для суммирования массива набора данных.
summary(ds)
name: [14x1 cell array of character vectors] sex: [14x1 cell array of character vectors] age: [14x1 double] min 1st quartile median 3rd quartile max 25 33 39.5 43 49 wgt: [14x1 double] min 1st quartile median 3rd quartile max 119 132 142 176 202 smoke: [14x1 double] min 1st quartile median 3rd quartile max 0 0 0 0 1
Импортируйте имена наблюдений.
Снова импортируйте текстовый файл, на этот раз указав, что первый столбец содержит имена наблюдений.
ds = dataset('File',fullfile(matlabroot,'help/toolbox/stats/examples','hospitalSmall.txt'),'ReadObsNames',true)
ds = sex age wgt smoke SMITH 'm' 38 176 1 JOHNSON 'm' 43 163 0 WILLIAMS 'f' 38 131 0 JONES 'f' 40 133 0 BROWN 'f' 49 119 0 DAVIS 'f' 46 142 0 MILLER 'f' 33 142 1 WILSON 'm' 40 180 0 MOORE 'm' 28 183 0 TAYLOR 'f' 31 132 0 ANDERSON 'f' 45 128 0 THOMAS 'f' 42 137 0 JACKSON 'm' 25 174 0 WHITE 'm' 39 202 1
Элементы первого столбца в текстовом файле, фамилии, теперь являются именами наблюдений. Имена наблюдений и имена строк являются свойствами массива набора данных. Вы всегда можете добавить или изменить имена наблюдений существующего массива набора данных, изменив свойство ObsNames
.
Измените свойства массива набора данных.
По умолчанию в DimNames
свойство массива набора данных имеет name
как дескриптор размерности наблюдений (строка). dataset
получило это имя из первой строки первого столбца в текстовом файле.
Измените первый элемент DimNames
на LastName
.
ds.Properties.DimNames{1} = 'LastName';
ds.Properties
ans = Description: '' VarDescription: {} Units: {} DimNames: {'LastName' 'Variables'} UserData: [] ObsNames: {14x1 cell} VarNames: {'sex' 'age' 'wgt' 'smoke'}
Индексируйте в массив набора данных.
Можно использовать имена наблюдений для индекса в массив набора данных. Для примера верните данные для пациента с последними именами BROWN
.
ds('BROWN',:)
ans = sex age wgt smoke BROWN 'f' 49 119 0
Обратите внимание, что имена наблюдений должны быть уникальными.
В этом примере показано, как создать массив набора данных из содержимого текстового файла, разделенного запятыми.
Создайте массив набора данных.
Импортируйте файл hospitalSmall.csv
как массив набора данных, задающий формат, разделенный запятыми.
ds = dataset('File',fullfile(matlabroot,'help/toolbox/stats/examples','hospitalSmall.csv'),'Delimiter',',')
ds = id name sex age wgt smoke 'YPL-320' 'SMITH' 'm' 38 176 1 'GLI-532' 'JOHNSON' 'm' 43 163 0 'PNI-258' 'WILLIAMS' 'f' 38 131 0 'MIJ-579' 'JONES' 'f' 40 133 0 'XLK-030' 'BROWN' 'f' 49 119 0 'TFP-518' 'DAVIS' 'f' 46 142 0 'LPD-746' 'MILLER' 'f' 33 142 1 'ATA-945' 'WILSON' 'm' 40 180 0 'VNL-702' 'MOORE' 'm' 28 183 0 'LQW-768' 'TAYLOR' 'f' 31 132 0 'QFY-472' 'ANDERSON' 'f' 45 128 0 'UJG-627' 'THOMAS' 'f' 42 137 0 'XUE-826' 'JACKSON' 'm' 25 174 0 'TRW-072' 'WHITE' 'm' 39 202 1
По умолчанию dataset
использует первую строку в текстовом файле в качестве имен переменных.
Добавьте имена наблюдений.
Используйте уникальные идентификаторы в переменной id
как имена наблюдений. Затем удалите переменную id
из массива набора данных.
ds.Properties.ObsNames = ds.id; ds.id = []
ds = name sex age wgt smoke YPL-320 'SMITH' 'm' 38 176 1 GLI-532 'JOHNSON' 'm' 43 163 0 PNI-258 'WILLIAMS' 'f' 38 131 0 MIJ-579 'JONES' 'f' 40 133 0 XLK-030 'BROWN' 'f' 49 119 0 TFP-518 'DAVIS' 'f' 46 142 0 LPD-746 'MILLER' 'f' 33 142 1 ATA-945 'WILSON' 'm' 40 180 0 VNL-702 'MOORE' 'm' 28 183 0 LQW-768 'TAYLOR' 'f' 31 132 0 QFY-472 'ANDERSON' 'f' 45 128 0 UJG-627 'THOMAS' 'f' 42 137 0 XUE-826 'JACKSON' 'm' 25 174 0 TRW-072 'WHITE' 'm' 39 202 1
Исключить наблюдения.
Удалите пациентов с последним именем BROWN
. Можно использовать strcmp
чтобы соответствовать 'BROWN'
с элементами переменной, содержащими фамилии, name
.
toDelete = strcmp(ds.name,'BROWN');
ds(toDelete,:) = []
ds = name sex age wgt smoke YPL-320 'SMITH' 'm' 38 176 1 GLI-532 'JOHNSON' 'm' 43 163 0 PNI-258 'WILLIAMS' 'f' 38 131 0 MIJ-579 'JONES' 'f' 40 133 0 TFP-518 'DAVIS' 'f' 46 142 0 LPD-746 'MILLER' 'f' 33 142 1 ATA-945 'WILSON' 'm' 40 180 0 VNL-702 'MOORE' 'm' 28 183 0 LQW-768 'TAYLOR' 'f' 31 132 0 QFY-472 'ANDERSON' 'f' 45 128 0 UJG-627 'THOMAS' 'f' 42 137 0 XUE-826 'JACKSON' 'm' 25 174 0 TRW-072 'WHITE' 'm' 39 202 1
Один пациент с фамилией BROWN
удаляется из массива набора данных.
Возвращает размер массива набора данных.
Массив теперь имеет 13 наблюдений.
size(ds)
ans = 13 5
Обратите внимание, что строка и столбец, соответствующие именам переменных и наблюдений, соответственно, не включены в размер dataset
массив.
В этом примере показано, как создать массив набора данных из содержимого Excel® файл электронной таблицы.
Создайте массив набора данных.
Импортируйте данные из первого листа в файл hospitalSmall.xlsx
, указывая, что файл данных является электронной таблицей Excel.
ds = dataset('XLSFile',fullfile(matlabroot,'help/toolbox/stats/examples','hospitalSmall.xlsx'))
ds = id name sex age wgt smoke 'YPL-320' 'SMITH' 'm' 38 176 1 'GLI-532' 'JOHNSON' 'm' 43 163 0 'PNI-258' 'WILLIAMS' 'f' 38 131 0 'MIJ-579' 'JONES' 'f' 40 133 0 'XLK-030' 'BROWN' 'f' 49 119 0 'TFP-518' 'DAVIS' 'f' 46 142 0 'LPD-746' 'MILLER' 'f' 33 142 1 'ATA-945' 'WILSON' 'm' 40 180 0 'VNL-702' 'MOORE' 'm' 28 183 0 'LQW-768' 'TAYLOR' 'f' 31 132 0 'QFY-472' 'ANDERSON' 'f' 45 128 0 'UJG-627' 'THOMAS' 'f' 42 137 0 'XUE-826' 'JACKSON' 'm' 25 174 0 'TRW-072' 'WHITE' 'm' 39 202 1
По умолчанию dataset
создает имена переменных с помощью содержимого первой строки в электронной таблице.
Укажите импортируемый лист.
Импортируйте данные из второго листа в новый массив набора данных.
ds2 = dataset('XLSFile',fullfile(matlabroot,'help/toolbox/stats/examples','hospitalSmall.xlsx'),'Sheet',2)
ds2 = id name sex age wgt smoke 'TRW-072' 'WHITE' 'm' 39 202 1 'ELG-976' 'HARRIS' 'f' 36 129 0 'KOQ-996' 'MARTIN' 'm' 48 181 1 'YUZ-646' 'THOMPSON' 'm' 32 191 1 'XBR-291' 'GARCIA' 'f' 27 131 1 'KPW-846' 'MARTINEZ' 'm' 37 179 0 'XBA-581' 'ROBINSON' 'm' 50 172 0 'BKD-785' 'CLARK' 'f' 48 133 0