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