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

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

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

Когда вы группируете строки вместе с помощью rowfunvarfunстек, и unstack функции, можно задать метки строки как сгруппированные переменные. Когда вы объединяющие таблицы или расписание вместе с помощью joininnerjoin, и 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  

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

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

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

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

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

| | | | | | |