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

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

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

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

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

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

Сводные данные синтаксисов индексации таблицы

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

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

  • Запись через точку возвращает содержимое переменной в виде массива.

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

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

Тип выхода

Синтаксис

Ряды

Переменные

Примеры

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

Т (rows, vars)

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

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

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

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

  • Двоеточие (:), что означает все строки

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

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

  • Имена

  • Двоеточие (:), что означает все переменные

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

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

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

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

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

S = vartype (type);

Т (rows, S)

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

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

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

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

  • Двоеточие (:), что означает все строки

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

  • S = vartype('numeric');

    T(1:5,S)

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

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

T. <reservedrangesplaceholder0>

T. (expression)

Не задан

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

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

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

  • T.Date

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

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

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

  • T.(1)

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

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

T. <reservedrangesplaceholder0>(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
      ⋮

См. также

| | |

Похожие темы