Используя метки строки в операциях таблицы и расписания

Таблицы и расписания обеспечивают способы маркировать строки в ваших данных. В таблицах можно маркировать строки именами. В расписаниях необходимо маркировать строки датами, времена или оба. Имена строки являются дополнительными для таблиц, но времена строки требуются для расписаний. Эти метки строки являются частью метаданных в таблице или расписании. В некоторых функциях также можно использовать метки строки в качестве ключевых переменных, группирующих переменных, и так далее, как можно использовать переменные данных в таблице или расписании. Этими функциями является sortrows, join, innerjoin, outerjoin, varfun, rowfun, stack и unstack. Существуют некоторые ограничения на использование этих табличных функций и на использование меток строки как ключевые переменные.

Сортировка на метках строки

Например, можно отсортировать расписание на его временах строки на одном или нескольких его переменных данных, или на временах строки и переменных данных вместе.

Создайте расписание с помощью функции timetable. Расписание имеет времена строки по своему первому измерению, маркируя строки. Времена строки являются свойством расписания, не переменной расписания.

Date = datetime(2016,7,[10;10;11;11;10;10;11;11]);
X = [1;1;1;1;2;2;2;2];
Y = {'a';'b';'a';'b';'a';'b';'a';'b'};
Z = [1;2;3;4;5;6;7;8];
TT = timetable(X,Y,Z,'RowTimes',Date)
TT=8×4 timetable
       Time        X     Y     Z
    ___________    _    ___    _

    10-Jul-2016    1    'a'    1
    10-Jul-2016    1    'b'    2
    11-Jul-2016    1    'a'    3
    11-Jul-2016    1    'b'    4
    10-Jul-2016    2    'a'    5
    10-Jul-2016    2    'b'    6
    11-Jul-2016    2    'a'    7
    11-Jul-2016    2    'b'    8

Переименуйте первую размерность. По умолчанию именем первой размерности расписания является Time. Можно получить доступ к свойству Properties.DimensionNames переименовать размерность.

TT.Properties.DimensionNames{1} = 'Date';
TT.Properties.DimensionNames
ans = 1x2 cell array
    {'Date'}    {'Variables'}

Как альтернатива, можно задать времена строки как первый входной параметр к timetable, не задавая 'RowTimes'. Имена функций timetable времена строки или первая размерность, после первого входного параметра, как это называет переменные расписания в честь других входных параметров.

TT = timetable(Date,X,Y,Z)
TT=8×4 timetable
       Date        X     Y     Z
    ___________    _    ___    _

    10-Jul-2016    1    'a'    1
    10-Jul-2016    1    'b'    2
    11-Jul-2016    1    'a'    3
    11-Jul-2016    1    'b'    4
    10-Jul-2016    2    'a'    5
    10-Jul-2016    2    'b'    6
    11-Jul-2016    2    'a'    7
    11-Jul-2016    2    'b'    8

Сортировка расписания ко временам строки. К виду на временах строки обратитесь к первой размерности расписания по наименованию.

sortrows(TT,'Date')
ans=8×4 timetable
       Date        X     Y     Z
    ___________    _    ___    _

    10-Jul-2016    1    'a'    1
    10-Jul-2016    1    'b'    2
    10-Jul-2016    2    'a'    5
    10-Jul-2016    2    'b'    6
    11-Jul-2016    1    'a'    3
    11-Jul-2016    1    'b'    4
    11-Jul-2016    2    'a'    7
    11-Jul-2016    2    'b'    8

Сортировка по условию переменных X и Y. виды sortrows на X сначала, затем на Y.

sortrows(TT,{'X' 'Y'})
ans=8×4 timetable
       Date        X     Y     Z
    ___________    _    ___    _

    10-Jul-2016    1    'a'    1
    11-Jul-2016    1    'a'    3
    10-Jul-2016    1    'b'    2
    11-Jul-2016    1    'b'    4
    10-Jul-2016    2    'a'    5
    11-Jul-2016    2    'a'    7
    10-Jul-2016    2    'b'    6
    11-Jul-2016    2    'b'    8

Сортировка ко временам строки и X вместе.

sortrows(TT,{'Date' 'X'})
ans=8×4 timetable
       Date        X     Y     Z
    ___________    _    ___    _

    10-Jul-2016    1    'a'    1
    10-Jul-2016    1    'b'    2
    10-Jul-2016    2    'a'    5
    10-Jul-2016    2    'b'    6
    11-Jul-2016    1    'a'    3
    11-Jul-2016    1    'b'    4
    11-Jul-2016    2    'a'    7
    11-Jul-2016    2    'b'    8

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

Когда вы группируете строки вместе с помощью rowfun, varfun, stack и функций unstack, можно задать метки строки как группирующие переменные. Когда вы объединяющие таблицы или расписание вместе с помощью join, innerjoin и функций outerjoin, можно указать, что строка маркирует как ключевые переменные.

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

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

A = table({'Michael';'Louis';'Alice';'Rosemary';'Julie'},[38;43;45;40;49],...
    'VariableNames',{'FirstName' 'Age'},...
    'RowNames',{'Garcia' 'Johnson' 'Wu' 'Jones' 'Picard'})
A=5×2 table
               FirstName     Age
               __________    ___

    Garcia     'Michael'     38 
    Johnson    'Louis'       43 
    Wu         'Alice'       45 
    Jones      'Rosemary'    40 
    Picard     'Julie'       49 

B = table({'Michael';'Beverly';'Alice'},...
    [64;69;67],...
    [119;163;133],...
    [122 80; 109 77; 117 75],...
    'VariableNames',{'FirstName' 'Height' 'Weight' 'BloodPressure'},...
    'RowNames',{'Garcia' 'Johnson' 'Wu'})
B=3×4 table
               FirstName    Height    Weight    BloodPressure
               _________    ______    ______    _____________

    Garcia     'Michael'      64       119       122     80  
    Johnson    'Beverly'      69       163       109     77  
    Wu         'Alice'        67       133       117     75  

Если таблица имеет имена строки, то можно индексировать в нее именем строки. Индексация именами строки является удобным способом выбрать строки таблицы. Индексируйте в B фамилией пациента, чтобы получить информацию о пациенте.

B('Garcia',:)
ans=1×4 table
              FirstName    Height    Weight    BloodPressure
              _________    ______    ______    _____________

    Garcia    'Michael'      64       119       122     80  

Выполните внутреннее объединение на этих двух таблицах. Обе таблицы используют фамилии пациентов, как строка называет, и содержите имена как табличную переменную. У некоторых пациентов в этих двух таблицах есть соответствие с фамилиями, но различными именами. Чтобы гарантировать что и фамилии и соответствие имен, используйте имена строки и FirstName как ключевые переменные. Чтобы задать имена строки как ключ или группирующую переменную, используйте имя первой размерности таблицы. По умолчанию именем первой размерности является 'Row'.

C = innerjoin(A,B,'Keys',{'Row','FirstName'})
C=2×5 table
              FirstName    Age    Height    Weight    BloodPressure
              _________    ___    ______    ______    _____________

    Garcia    'Michael'    38       64       119       122     80  
    Wu        'Alice'      45       67       133       117     75  

Если вы переименовываете первую размерность таблицы, то можно обратиться к именам строки тем именем вместо того, чтобы использовать 'Row'. Выполните то же внутреннее объединение как выше, но используйте другое имя, чтобы относиться к именам строки.

Покажите имена размерности A путем доступа к ее свойству Properties.DimensionNames.

A.Properties.DimensionNames
ans = 1x2 cell array
    {'Row'}    {'Variables'}

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

A.Properties.DimensionNames{1} = 'LastName';
A.Properties.DimensionNames
ans = 1x2 cell array
    {'LastName'}    {'Variables'}

Выполните внутреннее объединение на A и B с помощью LastName и FirstName как ключевые переменные.

B.Properties.DimensionNames{1} = 'LastName';
D = innerjoin(A,B,'Keys',{'LastName','FirstName'})
D=2×5 table
              FirstName    Age    Height    Weight    BloodPressure
              _________    ___    ______    ______    _____________

    Garcia    'Michael'    38       64       119       122     80  
    Wu        'Alice'      45       67       133       117     75  

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

  • Вы не можете сложить или распаковать метки строки с помощью функций unstack и stack. Однако можно использовать метки строки в качестве группирующих переменных.

  • Вы не можете выполнить соединение с помощью join, innerjoin или функций outerjoin, когда первый аргумент является таблицей, и второй аргумент является расписанием. Однако можно выполнить соединение, когда оба аргумента являются таблицами, оба - расписания, или первый аргумент является расписанием, и второй является таблица.

  • Вывод операции соединения может иметь метки строки, если вы задаете метки строки как ключевые переменные. Для получения дополнительной информации на этикетках строки от операции соединения, см. документацию относительно 'Keys', 'LeftKeys' и аргументов 'RightKeys' join, innerjoin и функций outerjoin.

Смотрите также

| | | | | | |