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

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

См. также

| | | | | | |