Таблицы и расписания обеспечивают способы пометить строки в ваших данных. В таблицах можно пометить строки именами. В расписаниях необходимо пометить строки датами, временами или и тем, и другим. Имена строк являются необязательными для таблиц, но для расписаний требуется время строк. Эти метки строк являются частью метаданных в таблице или расписании. В некоторых функциях вы также можете использовать метки строк как ключевые переменные, сгруппированные переменные и так далее, так же как вы можете использовать переменные данных в таблице или расписании. Эти функции 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'. The timetable функция называет время строки или первую размерность после первого входного параметра, так же как и переменные 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