exponenta event banner

Доступ к данным в таблицах

Таблица - это контейнер, в котором хранятся данные, ориентированные на столбцы, в переменных. Переменные таблицы могут иметь различные типы данных и размеры, если все переменные имеют одинаковое количество строк. Переменные таблицы имеют имена, так же как поля структуры имеют имена. Строки таблицы могут иметь имена, но имена строк не требуются. Чтобы получить доступ к данным таблицы, выполните индексирование строк и переменных с использованием их имен или числовых индексов.

Типичные причины индексации в таблицы:

  • Переупорядочивание или удаление строк и переменных.

  • Добавление массивов в качестве новых строк или переменных.

  • Извлечение массивов данных для использования в качестве входных аргументов функций.

Сводка по синтаксисам индексирования таблиц

В зависимости от используемого типа индексирования можно получить доступ к вложенной таблице или к массиву, извлеченному из таблицы. Индексирование с:

  • Сглаживание круглых скобок, (), возвращает таблицу с выбранными строками и переменными.

  • Точечная нотация возвращает содержимое переменной в виде массива.

  • Фигурные скобки {} возвращают массив, сцепленный с содержимым выбранных строк и переменных.

Строки и переменные можно указывать по имени, числовому индексу или типу данных. Начиная с R2019b имена переменных и строк могут содержать любые символы, включая пробелы и символы, не относящиеся к ASCII. Кроме того, они могут начинаться с любых символов, а не только букв. Имена переменных и строк не обязательно должны быть допустимыми идентификаторами MATLAB ® (согласно определению isvarname функция).

Тип вывода

Синтаксис

Ряды

Переменные

Примеры

Таблица, содержащая указанные строки и переменные

T(rows,vars)

Указывается как:

  • Номера строк (между 1 и m)

  • Имена, если T имеет имена строк

  • Время, если T является расписанием

  • Колон (:), означающий все строки

Указывается как:

  • Переменные числа (между 1 и n)

  • Имена

  • Колон (:), означающий все переменные

  • T(1:5,[1 4 5])

    Таблица, имеющая первые пять строк и первую, четвертую и пятую переменные T

  • T(:,{'A','B'})

    Таблица со всеми строками и переменными 'A' и 'B' от T

Таблица, содержащая переменные с указанным типом данных

S = vartype(type);

T(rows,S)

Указывается как:

  • Номера строк (между 1 и m)

  • Имена, если T имеет имена строк

  • Время, если T является расписанием

  • Колон (:), означающий все строки

Указывается как тип данных, например 'numeric', 'categorical', или 'datetime'

  • S = vartype('numeric');

    T(1:5,S)

    Таблица, содержащая первые пять строк и числовые переменные T

Массив, извлечение данных из одной переменной

T.var

T.(expression)

Не указано

Указывается как:

  • Имя переменной (без кавычек)

  • Выражение в скобках, возвращающее имя или число переменной

  • T.Date

    Массив, извлеченный из переменной таблицы с именем 'Date'

  • T.('2019/06/30')

    Массив, извлеченный из переменной таблицы с именем '2019/06/30'

  • T.(1)

    Массив, извлеченный из первой табличной переменной

Массив, извлечение данных из одной переменной и указанных строк

T.var(rows)

T.(expression)(rows)

Указывается как числовые или логические индексы массива

Указывается как:

  • Имя переменной (без кавычек)

  • Выражение в скобках, возвращающее имя или число переменной

  • T.Date(1:5)

    Первые пять строк массива, извлеченного из переменной таблицы с именем 'Date'

  • T.('2019/06/30')(1:5)

    Первые пять строк массива, извлеченного из переменной таблицы с именем '2019/06/30'

  • T.(1)(1:5)

    Первые пять строк массива, извлеченных из первой табличной переменной

Массив, объединяющий данные из указанных строк и переменных

T{rows,vars}

Указывается как:

  • Номера строк (между 1 и m)

  • Имена, если T имеет имена строк

  • Время, если T является расписанием

  • Колон (:), означающий все строки

Указывается как:

  • Переменные числа (между 1 и n)

  • Имена

  • Колон (:), означающий все переменные

  • T{1:5,[1 4 5]}

    Массив конкатенирован из первых пяти строк и первой, четвертой и пятой переменных T

  • T{:,{'A','B'}}

    Массив, сцепленный со всеми строками и переменными 'A' и 'B' от T

Массив, объединяющий данные из указанных строк и переменных с указанным типом данных

S = vartype(type);

T{rows,S}

Указывается как:

  • Номера строк (между 1 и m)

  • Имена, если T имеет имена строк

  • Время, если T является расписанием

  • Колон (:), означающий все строки

Указывается как тип данных, например 'numeric', 'categorical', или 'datetime'

  • S = vartype('numeric');

    T{1:5,S}

    Массив, конкатенированный из первых пяти строк и числовых переменных T

Массив, объединяющий данные из всех строк и переменных

T.Variables

Не указано

Не указано

  • T.Variables

    Идентично массиву, возвращенному T{:,:}

Таблицы, содержащие указанные строки и переменные

Загрузить данные выборки для 100 пациентов из patients MAT-файл для переменных рабочей области.

load patients
whos
  Name                            Size            Bytes  Class      Attributes

  Age                           100x1               800  double               
  Diastolic                     100x1               800  double               
  Gender                        100x1             11412  cell                 
  Height                        100x1               800  double               
  LastName                      100x1             11616  cell                 
  Location                      100x1             14208  cell                 
  SelfAssessedHealthStatus      100x1             11540  cell                 
  Smoker                        100x1               100  logical              
  Systolic                      100x1               800  double               
  Weight                        100x1               800  double               

Создайте таблицу и заполните ее Age, Gender, Height, Weight, и Smoker переменные рабочей области. Использовать уникальные идентификаторы в LastName в виде имен строк. T является таблицей «100 на 5». (При указании имен строк они не считаются табличной переменной).

T = table(Age,Gender,Height,Weight,Smoker,...
    'RowNames',LastName)
T=100×5 table
                Age      Gender      Height    Weight    Smoker
                ___    __________    ______    ______    ______

    Smith       38     {'Male'  }      71       176      true  
    Johnson     43     {'Male'  }      69       163      false 
    Williams    38     {'Female'}      64       131      false 
    Jones       40     {'Female'}      67       133      false 
    Brown       49     {'Female'}      64       119      false 
    Davis       46     {'Female'}      68       142      false 
    Miller      33     {'Female'}      64       142      true  
    Wilson      40     {'Male'  }      68       180      false 
    Moore       28     {'Male'  }      68       183      false 
    Taylor      31     {'Female'}      66       132      false 
    Anderson    45     {'Female'}      68       128      false 
    Thomas      42     {'Female'}      66       137      false 
    Jackson     25     {'Male'  }      71       174      false 
    White       39     {'Male'  }      72       202      true  
    Harris      36     {'Female'}      65       129      false 
    Martin      48     {'Male'  }      71       181      true  
      ⋮

Индекс с использованием числовых индексов

Создание вложенной таблицы, содержащей первые пять строк и все переменные из T. Чтобы указать нужные строки и переменные, используйте числовые индексы в скобках. Этот тип индексирования аналогичен индексированию в числовые массивы.

T1 = T(1:5,:)
T1=5×5 table
                Age      Gender      Height    Weight    Smoker
                ___    __________    ______    ______    ______

    Smith       38     {'Male'  }      71       176      true  
    Johnson     43     {'Male'  }      69       163      false 
    Williams    38     {'Female'}      64       131      false 
    Jones       40     {'Female'}      67       133      false 
    Brown       49     {'Female'}      64       119      false 

T1 является таблицей 5 на 5.

Помимо числовых индексов в скобках можно использовать имена строк или переменных. (В этом случае использование индексов строк и двоеточия является более компактным, чем использование имен строк или переменных.)

Индекс с использованием имен

Выберите все данные для пациентов с фамилиями 'Williams' и 'Brown'. С тех пор T имеет имена строк, которые являются фамилиями пациентов, индексировать в T с использованием имен строк.

T2 = T({'Williams','Brown'},:)
T2=2×5 table
                Age      Gender      Height    Weight    Smoker
                ___    __________    ______    ______    ______

    Williams    38     {'Female'}      64       131      false 
    Brown       49     {'Female'}      64       119      false 

T2 является таблицей 2 на 5.

Можно также выбрать переменные по имени. Создание таблицы, содержащей только первые пять строк T и Height и Weight переменные. Отобразить его.

T3 = T(1:5,{'Height','Weight'})
T3=5×2 table
                Height    Weight
                ______    ______

    Smith         71       176  
    Johnson       69       163  
    Williams      64       131  
    Jones         67       133  
    Brown         64       119  

Имена переменных таблицы не обязательно должны быть допустимыми идентификаторами MATLAB. Они могут содержать пробелы и символы, не относящиеся к ASCII, и могут начинаться с любого символа.

Добавление имени переменной с пробелами и тире в T. Затем проиндексировать в T с использованием имен переменных.

T = addvars(T,SelfAssessedHealthStatus,'NewVariableNames','Self-Assessed Health Status');
T(1:5,{'Age','Smoker','Self-Assessed Health Status'})
ans=5×3 table
                Age    Smoker    Self-Assessed Health Status
                ___    ______    ___________________________

    Smith       38     true             {'Excellent'}       
    Johnson     43     false            {'Fair'     }       
    Williams    38     false            {'Good'     }       
    Jones       40     false            {'Fair'     }       
    Brown       49     false            {'Good'     }       

Указать подстрочный индекс типа данных

Вместо указания переменных с помощью имен или чисел можно создать подстрочный индекс типа данных, соответствующий всем переменным одного типа.

Сначала создайте подстрочный индекс типа данных для соответствия числовым переменным таблицы.

S = vartype('numeric')
S = 
	table vartype subscript:

		Select table variables matching the type 'numeric'

	See Access Data in a Table.

Создайте таблицу, содержащую только числовые переменные и только первые пять строк из T.

T4 = T(1:5,S)
T4=5×3 table
                Age    Height    Weight
                ___    ______    ______

    Smith       38       71       176  
    Johnson     43       69       163  
    Williams    38       64       131  
    Jones       40       67       133  
    Brown       49       64       119  

Извлечение данных с помощью точечных обозначений и логических значений

Создание таблицы из patients MAT-файл. Затем используйте точечную нотацию для извлечения данных из табличных переменных. Индексировать можно также с помощью логических индексов, созданных на основе значений в табличной переменной, удовлетворяющих условию.

load patients

T = table(Age,Gender,Height,Weight,Smoker,...
    'RowNames',LastName);

Извлечь данные из переменной

Чтобы извлечь данные из одной переменной, используйте точечную нотацию. Извлечь числовые значения из переменной Weight. Затем постройте гистограмму этих значений.

histogram(T.Weight)
title('Patient Weight')

Figure contains an axes. The axes with title Patient Weight contains an object of type histogram.

T.Weight является вектором столбца двойной точности со 100 строками.

Выбор строк с логическим индексированием

Можно индексировать в массив или таблицу с помощью массива логических индексов. Как правило, используется логическое выражение, определяющее, какие значения в переменной таблицы соответствуют условию. Результатом выражения является массив логических индексов.

Например, создайте логические индексы, соответствующие пациентам, возраст которых меньше 40.

rows = T.Age < 40
rows = 100x1 logical array

   1
   0
   1
   0
   0
   0
   1
   0
   1
   1
      ⋮

Извлечь высоты для пациентов, возраст которых меньше 40, индексировать в Height переменная с использованием rows. Есть 56 пациентов моложе, чем 40.

T.Height(rows)
ans = 56×1

    71
    64
    64
    68
    66
    71
    72
    65
    69
    69
      ⋮

Можно индексировать в таблицу с логическими индексами. Отображение строк T для пациентов, которые моложе 40.

T(rows,:)
ans=56×5 table
                 Age      Gender      Height    Weight    Smoker
                 ___    __________    ______    ______    ______

    Smith        38     {'Male'  }      71       176      true  
    Williams     38     {'Female'}      64       131      false 
    Miller       33     {'Female'}      64       142      true  
    Moore        28     {'Male'  }      68       183      false 
    Taylor       31     {'Female'}      66       132      false 
    Jackson      25     {'Male'  }      71       174      false 
    White        39     {'Male'  }      72       202      true  
    Harris       36     {'Female'}      65       129      false 
    Thompson     32     {'Male'  }      69       191      true  
    Garcia       27     {'Female'}      69       131      true  
    Martinez     37     {'Male'  }      70       179      false 
    Rodriguez    39     {'Female'}      64       117      false 
    Walker       28     {'Female'}      65       123      true  
    Hall         25     {'Male'  }      70       189      false 
    Allen        39     {'Female'}      63       143      false 
    Young        25     {'Female'}      63       114      false 
      ⋮

Можно сопоставить несколько условий с одним логическим выражением. Отображение строк для курящих пациентов моложе 40.

rows = (T.Smoker==true & T.Age<40);
T(rows,:)
ans=18×5 table
                 Age      Gender      Height    Weight    Smoker
                 ___    __________    ______    ______    ______

    Smith        38     {'Male'  }      71       176      true  
    Miller       33     {'Female'}      64       142      true  
    White        39     {'Male'  }      72       202      true  
    Thompson     32     {'Male'  }      69       191      true  
    Garcia       27     {'Female'}      69       131      true  
    Walker       28     {'Female'}      65       123      true  
    King         30     {'Male'  }      67       186      true  
    Nelson       33     {'Male'  }      66       180      true  
    Mitchell     39     {'Male'  }      71       164      true  
    Turner       37     {'Male'  }      70       194      true  
    Sanders      33     {'Female'}      67       115      true  
    Price        31     {'Male'  }      72       178      true  
    Jenkins      28     {'Male'  }      69       189      true  
    Long         39     {'Male'  }      68       182      true  
    Patterson    37     {'Female'}      65       120      true  
    Flores       31     {'Female'}      66       141      true  
      ⋮

Точечная нотация с любым именем переменной или выражением

При индексировании с использованием точечной нотации существует два способа задания переменной.

  • По имени, без кавычек. Например, T.Date задает переменную с именем 'Date'.

  • По выражению, где выражение заключено в круглые скобки после точки. Например, T.('Start Date') задает переменную с именем 'Start Date'.

Используйте первый синтаксис, если имя переменной таблицы также является допустимым идентификатором MATLAB ®. (Действительный идентификатор начинается с буквы и включает только буквы, цифры и подчеркивания.)

Используйте второй синтаксис при указании:

  • Число, указывающее положение переменной в таблице.

  • Имя переменной, которое не является допустимым идентификатором MATLAB.

  • Функция, выходные данные которой являются именем переменной в таблице или переменной, добавляемой в таблицу. Вывод функции должен быть символьным вектором или строковым скаляром.

Например, создайте таблицу из patients MAT-файл. Затем используйте точечную нотацию для доступа к содержимому переменных таблицы.

load patients

T = table(Age,Gender,Height,Weight,Smoker,...
    'RowNames',LastName);

Чтобы указать переменную по положению в таблице, используйте число. Age является первой переменной в T, поэтому используйте номер 1 для указания его положения.

T.(1)
ans = 100×1

    38
    43
    38
    40
    49
    46
    33
    40
    28
    31
      ⋮

Чтобы указать переменную по имени, ее можно заключить в кавычки. С тех пор 'Age' является допустимым идентификатором, его можно указать с помощью T.Age или T.('Age').

T.('Age')
ans = 100×1

    38
    43
    38
    40
    49
    46
    33
    40
    28
    31
      ⋮

Можно указать имена табличных переменных, которые не являются допустимыми идентификаторами MATLAB. Имена переменных могут содержать пробелы и символы, отличные от ASCII, и начинаться с любого символа. Однако при использовании точечной нотации для доступа к табличной переменной с таким именем необходимо указать ее в скобках.

Добавление имени переменной с пробелами и дефис в T.

T = addvars(T,SelfAssessedHealthStatus,'NewVariableNames','Self-Assessed Health Status');
T(1:5,:)
ans=5×6 table
                Age      Gender      Height    Weight    Smoker    Self-Assessed Health Status
                ___    __________    ______    ______    ______    ___________________________

    Smith       38     {'Male'  }      71       176      true             {'Excellent'}       
    Johnson     43     {'Male'  }      69       163      false            {'Fair'     }       
    Williams    38     {'Female'}      64       131      false            {'Good'     }       
    Jones       40     {'Female'}      67       133      false            {'Fair'     }       
    Brown       49     {'Female'}      64       119      false            {'Good'     }       

Доступ к новой табличной переменной с помощью точечной нотации. Отображение первых пяти элементов.

C = T.('Self-Assessed Health Status');
C(1:5)
ans = 5x1 cell
    {'Excellent'}
    {'Fair'     }
    {'Good'     }
    {'Fair'     }
    {'Good'     }

Можно также использовать вывод функции в качестве имени переменной. Удалить T.('Self-Assessed Health Status') переменная. Затем замените его переменной, имя которой включает текущую дату.

T.('Self-Assessed Health Status') = [];
T.(string(datetime('today')) + ' Self Report') = SelfAssessedHealthStatus;
T(1:5,:)
ans=5×6 table
                Age      Gender      Height    Weight    Smoker    23-Mar-2021 Self Report
                ___    __________    ______    ______    ______    _______________________

    Smith       38     {'Male'  }      71       176      true           {'Excellent'}     
    Johnson     43     {'Male'  }      69       163      false          {'Fair'     }     
    Williams    38     {'Female'}      64       131      false          {'Good'     }     
    Jones       40     {'Female'}      67       133      false          {'Fair'     }     
    Brown       49     {'Female'}      64       119      false          {'Good'     }     

Извлечение данных из указанных строк и переменных

Индексирование фигурными скобками извлекает данные из таблицы и приводит к массиву, а не к подтаблице. Кроме этого различия, можно указать строки и переменные, используя числа, имена и подстрочные индексы типа данных, точно так же, как при индексировании с помощью гладких скобок. Для извлечения значений из таблицы используйте фигурные скобки. При извлечении значений из нескольких табличных переменных эти переменные должны иметь типы данных, позволяющие объединять их вместе.

Указать строки и переменные

Создание таблицы из числовых и логических массивов из patients файл.

load patients

T = table(Age,Height,Weight,Smoker,...
    'RowNames',LastName);

Извлечение данных из нескольких переменных в T. В отличие от точечной нотации, индексирование с фигурными скобками может извлекать значения из нескольких переменных таблицы и объединять их в один массив.

Извлеките рост и вес для первых пяти пациентов. Используйте числовые индексы для выбора первых пяти строк, а имена переменных - для выбора переменных Height и Weight.

A = T{1:5,{'Height','Weight'}}
A = 5×2

    71   176
    69   163
    64   131
    67   133
    64   119

A является числовым массивом 5 на 2, а не таблицей.

Если указать одно имя переменной, то индексирование фигурной скобки приведет к тому же массиву, что и точечная нотация. Однако при использовании кёрточного индексирования фигурных скобок необходимо указывать как строки, так и переменные. Например, этот синтаксис T.Height и T{:,'Height'} возвращает тот же массив.

Извлечение данных из всех строк и переменных

Если все переменные таблицы имеют типы данных, которые позволяют объединять их вместе, можно использовать T.Variables , чтобы поместить все данные таблицы в массив. Этот синтаксис эквивалентен T{:,:} где двоеточия обозначают все строки и все переменные.

A2 = T.Variables
A2 = 100×4

    38    71   176     1
    43    69   163     0
    38    64   131     0
    40    67   133     0
    49    64   119     0
    46    68   142     0
    33    64   142     1
    40    68   180     0
    28    68   183     0
    31    66   132     0
      ⋮

См. также

| | |

Связанные темы