exponenta event banner

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

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

См. также

| | | | | | |