Таблицы и расписания позволяют маркировать строки в данных. В таблицах можно пометить строки именами. В расписаниях необходимо маркировать строки датами, временем или и тем, и другим. Имена строк необязательны для таблиц, но время строк требуется для расписаний. Эти метки строк являются частью метаданных в таблице или расписании. В некоторых функциях можно также использовать метки строк в качестве ключевых переменных, переменных группировки и т.д., так же как можно использовать переменные данных в таблице или расписании. Эти функции: 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×3 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.DimensionNamesans = 1x2 cell
{'Date'} {'Variables'}
В качестве альтернативы можно указать время строки в качестве первого входного аргумента для timetable, без указания 'RowTimes'. timetable функция называет время строки или первое измерение после первого входного аргумента, точно так же, как она называет переменные расписания после других входных аргументов.
TT = timetable(Date,X,Y,Z)
TT=8×3 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×3 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×3 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×3 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
{'Row'} {'Variables'}
Изменение имени первого измерения таблицы с помощью его Properties.DimensionNames собственность. Затем используйте новое имя в качестве ключевой переменной.
A.Properties.DimensionNames{1} = 'LastName';
A.Properties.DimensionNamesans = 1x2 cell
{'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
Вы не можете стеллажировать или разбивать метки строк с помощью stack и unstack функции. Однако можно использовать метки строк в качестве переменных группировки.
Невозможно выполнить соединение с помощью join, innerjoin, или outerjoin функции, когда первый аргумент является таблицей, а второй аргумент является расписанием. Однако соединение можно выполнить, если оба аргумента являются таблицами, оба являются расписаниями или первый аргумент является расписанием, а второй - таблицей.
Выходные данные операции объединения могут содержать метки строк, если метки строк указаны в качестве ключевых переменных. Дополнительные сведения о метках строк из операции присоединения см. в документации по 'Keys', 'LeftKeys', и 'RightKeys' аргументы join, innerjoin, и outerjoin функции.
innerjoin | join | outerjoin | rowfun | sortrows | stack | unstack | varfun