Вы можете использовать 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
Структуры и массивы ячеек не имеют свойств для хранения метаданных.