Можно использовать table
тип данных для сбора данных смешанного типа и свойств метаданных, таких как имя переменной, имена строк, описания и переменные модули, в одном контейнере. Таблицы подходят для ориентированных на столбцы или табличных данных, которые часто хранятся в виде столбцов в текстовом файле или в электронной таблице. Например, можно использовать таблицу для хранения экспериментальных данных с строками, представляющими различные наблюдения, и столбцами, представляющими различные измеренные переменные.
Таблицы состоят из строк и ориентированных на столбцы переменных. Каждая переменная в таблице может иметь различные типы данных и другой размер, но каждая переменная должна иметь одинаковое число строк.
Для примера загрузите выборку данные о пациентах.
load patients
Затем объедините переменные рабочей области, Systolic
и Diastolic
в одну BloodPressure
переменная переменная рабочей области, Gender
, от массива ячеек из векторов символов до категориального массива.
BloodPressure = [Systolic Diastolic]; Gender = categorical(Gender); whos('Gender','Age','Smoker','BloodPressure')
Name Size Bytes Class Attributes Age 100x1 800 double BloodPressure 100x2 1600 double Gender 100x1 330 categorical Smoker 100x1 100 logical
Переменные Age
, BloodPressure
, Gender
, и Smoker
имеют различные типы данных и являются кандидатами для хранения в таблице, поскольку все они имеют одинаковое число строк 100.
Теперь составьте таблицу из переменных и отобразите первые пять строк.
T = table(Gender,Age,Smoker,BloodPressure); T(1:5,:)
ans=5×4 table
Gender Age Smoker BloodPressure
______ ___ ______ _____________
Male 38 true 124 93
Male 43 false 109 77
Female 38 false 125 83
Female 40 false 117 75
Female 49 false 122 80
Таблица отображается в табличном формате с именами переменных в верхней части.
Каждая переменная в таблице является одним типом данных. Если вы добавляете новую строку в таблицу, MATLAB ® усиливает согласованность типа данных между новыми данными и соответствующими табличными переменными. Например, если вы пытаетесь добавить информацию для нового пациента, где в первом столбце содержится возраст пациента вместо пола, как в выражении T(end+1,:) = {37,{'Female'},true,[130 84]}
, тогда вы получите ошибку:
Invalid RHS for assignment to a categorical array.
Ошибка возникает из-за того, что MATLAB ® не может назначить числовые данные, 37
, в категориальный массив, Gender
.
Для сравнения таблиц со структурами рассмотрим массив структур, StructArray
, что эквивалентно таблице, T
.
StructArray = table2struct(T)
StructArray=100×1 struct array with fields:
Gender
Age
Smoker
BloodPressure
Массивы структур организуют записи с помощью именованных полей. Значение каждого поля может иметь различные типы данных или размер. Теперь отобразите именованные поля для первого элемента StructArray
.
StructArray(1)
ans = struct with fields:
Gender: Male
Age: 38
Smoker: 1
BloodPressure: [124 93]
Поля в массиве структур аналогичны переменным в таблице. Однако, в отличие от таблиц, невозможно обеспечить однородность внутри поля. Для примера можно иметь некоторые значения S.Gender
которые являются категориальным массивом элементами, Male
или Female
, другие, которые являются векторами символов, 'Male'
или 'Female'
и другие, которые являются целыми числами, 0
или 1
.
Теперь рассмотрим те же данные, которые хранятся в скалярной структуре, с четырьмя полями, каждый из которых содержит одну переменную из таблицы.
ScalarStruct = struct(... 'Gender',{Gender},... 'Age',Age,... 'Smoker',Smoker,... 'BloodPressure',BloodPressure)
ScalarStruct = struct with fields:
Gender: [100x1 categorical]
Age: [100x1 double]
Smoker: [100x1 logical]
BloodPressure: [100x2 double]
В отличие от таблиц, вы не можете применить, чтобы данные были прямоугольными. Для примера - поле ScalarStruct.Age
может отличаться от других полей.
Таблица позволяет вам поддерживать прямоугольную структуру (подобную массиву структур) и обеспечивать однородность переменных (подобных полям в скалярной структуре). Несмотря на то, что массивы ячеек не имеют именованных полей, они имеют многие из тех же недостатков, что и массивы структур и скалярные структуры. Если у вас есть прямоугольные данные, которые однородны в каждой переменной, рассмотрите использование таблицы. Затем можно использовать числовую или именованную индексацию, и можно использовать свойства таблицы для хранения метаданных.
Индексировать в таблицу можно с помощью круглых скобок, фигурных скобок или индексации точек. Круглые скобки позволяют вам выбрать подмножество данных в таблице и сохранить контейнер таблицы. Фигурные скобки и индексация точек позволяют извлекать данные из таблицы. В рамках каждого метода индексирования таблицы можно задать строки или переменные для доступа по имени или по числовому индексу.
Рассмотрим выборочную таблицу сверху. Каждая строка таблицы, T
, представляет другого пациента. Переменная рабочей области, LastName
, содержит уникальные идентификаторы для 100 строк. Добавьте имена строк в таблицу путем установки RowNames
свойство к LastName
и отобразите первые пять строк обновленной таблицы.
T.Properties.RowNames = LastName; T(1:5,:)
ans=5×4 table
Gender Age Smoker BloodPressure
______ ___ ______ _____________
Smith Male 38 true 124 93
Johnson Male 43 false 109 77
Williams Female 38 false 125 83
Jones Female 40 false 117 75
Brown Female 49 false 122 80
В дополнение к маркировке данных для доступа к данным в таблице можно использовать имена строк и переменных. Например, используйте именованную индексацию для отображения возраста и артериального давления пациентов Williams
и Brown
.
T({'Williams','Brown'},{'Age','BloodPressure'})
ans=2×2 table
Age BloodPressure
___ _____________
Williams 38 125 83
Brown 49 122 80
Теперь используйте числовую индексацию, чтобы вернуть эквивалентную подтаблицу. Верните третью и пятую строку от второй и четвертой переменных.
T(3:2:5,2:2:4)
ans=2×2 table
Age BloodPressure
___ _____________
Williams 38 125 83
Brown 49 122 80
С массивами ячеек или структурами у вас нет такой же гибкости, чтобы использовать именованную или числовую индексацию.
С массивом ячеек необходимо использовать strcmp
чтобы найти нужные именованные данные и затем можно проиндексировать в массив.
Со скалярной структурой или массивом структур невозможно обратиться к полю по числу. Кроме того, со скалярной структурой вы не можете легко выбрать подмножество переменных или подмножество наблюдений. С массивом структур можно выбрать подмножество наблюдений, но вы не можете выбрать подмножество переменных.
С помощью таблицы вы можете получить доступ к данным по именованному индексу или по числовому индексу. Кроме того, вы можете легко выбрать подмножество переменных и подмножество строк.
Дополнительные сведения об индексации таблицы см. в разделе Доступ к данным в таблицах.
В дополнение к хранению данных таблицы имеют свойства для хранения метаданных, такие как имена переменных, имена строк, описания и переменные модули. Вы можете получить доступ к свойству, используя T.Properties.PropName
, где T - имя таблицы, а PropName - одно из свойств таблицы.
Например, добавьте описание таблицы, описание переменных и переменные модули для Age
.
T.Properties.Description = 'Simulated Patient Data'; T.Properties.VariableDescriptions = ... {'Male or Female' ... '' ... 'true or false' ... 'Systolic/Diastolic'}; T.Properties.VariableUnits{'Age'} = 'Yrs';
Отдельные пустые символьные векторы в массиве ячеек для VariableDescriptions
указывает, что соответствующая переменная не имеет описания. Для получения дополнительной информации смотрите раздел « Свойства» table
.
Чтобы распечатать сводную таблицу, используйте summary
функция.
summary(T)
Description: Simulated Patient Data Variables: Gender: 100x1 categorical Properties: Description: Male or Female Values: Female 53 Male 47 Age: 100x1 double Properties: Units: Yrs Values: Min 25 Median 39 Max 50 Smoker: 100x1 logical Properties: Description: true or false Values: True 34 False 66 BloodPressure: 100x2 double Properties: Description: Systolic/Diastolic Values: Column 1 Column 2 ________ ________ Min 109 68 Median 122 81.5 Max 138 99
Структуры и массивы ячеек не имеют свойств для хранения метаданных.