unstack

Распакуйте данные из одной переменной в несколько переменных

Описание

пример

U = unstack(S,vars,ivar) преобразовывает таблицу или расписание, S, к переводной таблице или расписанию, U, это распаковано. vars задает переменные в S, каждый из которых распакован в несколько переменных в U. В общем случае U содержит больше переменных, но меньше строк, чем S.

ivar входной параметр задает переменную в S это unstack использование в качестве переменной индикатора. Значения в ivar определите который переменные в U содержите элементы, взятые из vars после распаковывания.

unstack функционируйте обрабатывает остающиеся переменные по-другому в таблицах и расписаниях.

  • Если S таблица, затем unstack обрабатывает остающиеся переменные как сгруппированные переменные. Каждая уникальная комбинация значений в сгруппированных переменных идентифицирует группу строк в S это распаковано в одну строку U.

  • Если S расписание, затем unstack отбрасывает остающиеся переменные. Однако unstack обрабатывает вектор времен строки как сгруппированная переменная.

Вы не можете распаковать имена строки таблицы, или времена строки расписания, или задать любого как переменную индикатора. Можно задать имена строки или времена строки как постоянные переменные с 'ConstantVariables' аргумент.

U = unstack(S,vars,ivar,Name,Value) преобразовывает таблицу или расписание S с дополнительными опциями, заданными одним или несколькими Name,Value парные аргументы.

Например, можно задать как unstack преобразует переменные из S к переменным в U.

пример

[U,is] = unstack(___) также возвращает вектор индекса, is, указание на соответствие между строками в U и строки в S. Можно использовать любой из предыдущих входных параметров.

Примеры

свернуть все

Составьте таблицу, указывающую на сумму снегопада в различных городах для различных штормов. Задайте города с помощью categorical массив, с тех пор существует фиксированный набор городских имен в этой таблице.

Storm = [3;3;1;3;1;1;4;2;4;2;4;2];
Town = categorical({'Natick';'Worcester';'Natick';'Boston';'Boston';'Worcester';...
                    'Boston';'Natick';'Worcester';'Worcester';'Natick';'Boston'});
Snowfall = [0;3;5;5;9;10;12;13;15;16;17;21];

S = table(Storm,Town,Snowfall)
S=12×3 table
    Storm      Town       Snowfall
    _____    _________    ________

      3      Natick           0   
      3      Worcester        3   
      1      Natick           5   
      3      Boston           5   
      1      Boston           9   
      1      Worcester       10   
      4      Boston          12   
      2      Natick          13   
      4      Worcester       15   
      2      Worcester       16   
      4      Natick          17   
      2      Boston          21   

S содержит три записи снегопада для каждого шторма, один для каждого города. S находится в сложенном формате, с Town наличие categorical тип данных. Табличные переменные, которые имеют categorical тип данных является полезными переменными индикатора и сгруппированными переменными для того, чтобы распаковать.

Разделите переменную Snowfall в три переменные, один для каждого города, заданного в переменной, Town. Выходная таблица, U, находится в распакованном формате.

U = unstack(S,'Snowfall','Town')
U=4×4 table
    Storm    Boston    Natick    Worcester
    _____    ______    ______    _________

      3         5         0          3    
      1         9         5         10    
      4        12        17         15    
      2        21        13         16    

Каждая строка в U содержит данные из строк в S это имеет то же значение в сгруппированной переменной, Storm. Порядок уникальных значений в Storm определяет порядок данных в U.

Распакуйте данные и примените функцию агрегации к нескольким строкам в той же группе, которые имеют те же значения в переменной индикатора.

Создайте расписание, содержащее данные по цене двух запасов более чем два дня. Чтобы задать времена строки, используйте datetime значения. Задайте имена запасов с помощью categorical массив начиная с этого расписания имеет фиксированный набор имен запаса.

Date = [repmat(datetime('2008-04-12'),6,1);...
        repmat(datetime('2008-04-13'),5,1)];
Stock = categorical({'Stock1';'Stock2';'Stock1';'Stock2';...
                     'Stock2';'Stock2';'Stock1';'Stock2';...
                     'Stock2';'Stock1';'Stock2'});
Price = [60.35;27.68;64.19;25.47;28.11;27.98;...
         63.85;27.55;26.43;65.73;25.94];

S = timetable(Date,Stock,Price)
S=11×2 timetable
       Date        Stock     Price
    ___________    ______    _____

    12-Apr-2008    Stock1    60.35
    12-Apr-2008    Stock2    27.68
    12-Apr-2008    Stock1    64.19
    12-Apr-2008    Stock2    25.47
    12-Apr-2008    Stock2    28.11
    12-Apr-2008    Stock2    27.98
    13-Apr-2008    Stock1    63.85
    13-Apr-2008    Stock2    27.55
    13-Apr-2008    Stock2    26.43
    13-Apr-2008    Stock1    65.73
    13-Apr-2008    Stock2    25.94

S содержит две цены на Stock1 в течение первого дня и четырех цен на Stock2 в течение первого дня.

Создайте расписание, содержащее отдельные переменные для каждого запаса и одну строку в течение каждого дня. Используйте Date (вектор времен строки) как сгруппированная переменная и применяют функцию агрегации, @mean, к числовым значениям от переменной, Price, для каждой группы.

[U,is] = unstack(S,'Price','Stock',...
                 'AggregationFunction',@mean)
U=2×2 timetable
       Date        Stock1    Stock2
    ___________    ______    ______

    12-Apr-2008    62.27     27.31 
    13-Apr-2008    64.79     26.64 

is = 2×1

     1
     7

U содержит среднюю стоимость каждого запаса, сгруппированного по дате.

is идентифицирует индекс первого значения для каждой группы строк в S. Первое значение для группы с датой 13 апреля 2008 находится в седьмой строке S.

Входные параметры

свернуть все

Входная таблица в виде таблицы или расписания. S должен содержать переменные данных, чтобы распаковать, vars, и переменная индикатора, ivar. Остающиеся переменные в S может быть обработан или как сгруппированные переменные или как постоянные переменные.

Переменные в S распаковать в виде положительного целого числа, вектора из положительных целых чисел, вектора символов, массива ячеек из символьных векторов, массива строк или логического вектора.

Переменная Indicator в SВ виде положительного целого числа, вектора символов или строкового скаляра. Значения в переменной заданы ivar укажите который переменные в U содержите элементы, взятые из переменных, заданных vars.

Переменная задана ivar может быть числовой вектор, логический вектор, символьный массив, массив ячеек из символьных векторов, массив строк или категориальный вектор.

Аргументы в виде пар имя-значение

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: 'AggregationFunction',@mean применяет функцию агрегации @mean к значениям в vars.

Сгруппированные переменные в S это задает группы строк в виде разделенной запятой пары, состоящей из 'GroupingVariables' и положительное целое число, вектор из положительных целых чисел, вектора символов, массива ячеек из символьных векторов, массива строк или логического вектора. Каждая группа строк в S становится одной строкой в U.

S может иметь метки строки по ее первому измерению. Если S таблица, затем она может иметь имена строки как метки. Если S расписание, затем оно должно иметь времена строки как метки. unstack может обработать метки строки как сгруппированные переменные.

  • Если вы не задаете 'GroupingVariables', и S расписание, затем unstack обрабатывает времена строки как сгруппированную переменную.

  • Если вы задаете 'GroupingVariables', и S имеет имена строки или времена строки, затем unstack не обрабатывает их как сгруппированные переменные, если вы не включаете их в значение 'GroupingVariables'.

Переменные, постоянные в группе в виде разделенной запятой пары, состоящей из 'ConstantVariables' и положительное целое число, вектор из положительных целых чисел, вектора символов, массива ячеек из символьных векторов, массива строк или логического вектора.

Значения для этих переменных в U взяты из первой строки в каждой группе в S.

Можно включить имена строк или времена строки S когда вы задаете значение 'ConstantVariables'.

Имена для новых переменных данных в UВ виде разделенной запятой пары, состоящей из 'NewDataVariableNames' и массив ячеек из символьных векторов или массив строк.

Если вы не задаете 'NewDataVariableNames'то unstack создает имена для новых переменных данных в U на основе значений в переменной индикатора, заданной ivar.

Функция агрегации от значений в vars к одному значению в виде разделенной запятой пары, состоящей из 'AggregationFunction' и указатель на функцию. unstack применяет эту функцию к строкам от той же группы, которые имеют то же значение в ivar. Функция должна агрегировать значения данных в одно значение.

Если вы не задаете значение 'AggregationFunction'то unstack использует различные функции агрегации по умолчанию в зависимости от типа данных.

  • Для числовых данных функция агрегации по умолчанию sum.

  • Для нечисловых данных функция агрегации по умолчанию unique.

Если нет никаких значений данных, чтобы агрегироваться, потому что нет никаких значений данных, соответствующих данному значению индикатора в ivar после распаковывания, затем unstack должен заполнить пустой элемент в распакованной выходной таблице. В этом случае, unstack вызывает функцию агрегации с пустым массивом, как введено. Значение это unstack заполняет зависит от того, что возвращает функция агрегации, когда ее вход является пустым массивом.

Значение возвращено функцией агрегации когда никакие данные, чтобы агрегироваться

Значение, вставленное в пустые элементы распакованной таблицы

Функция агрегации повышает ошибку

unstack ошибка повышений.

Пустой массив

Заполните значение соответствующего типа данных (NaNNAT, "", и так далее).

Пример: Если функция агрегации unique, и это возвращает double 0 на 0 массив, затем unstack вставляет NaN в выходную таблицу.

Скалярное значение

Скалярное значение возвращено от функции агрегации.

Пример: Если функция агрегации numel и это возвращает 0то unstack вставляет 0 в выходную таблицу.

Вектор, матрица или многомерный массив

unstack ошибка повышений.

Управляйте для именования переменных в UВ виде разделенной запятой пары, состоящей из 'VariableNamingRule' и любой значение 'modify' или 'preserve'.

Значения 'VariableNamingRule' задайте следующие правила для именования переменной в выходной таблице или расписании.

Значение 'VariableNamingRule'

Правило

'modify' (значение по умолчанию)

Измените имена, взятые из входной таблицы или расписания так, чтобы соответствующие имена переменных в выходе были также допустимыми идентификаторами MATLAB®.

'preserve'

Сохраните настоящие имена, взятые из входной таблицы или расписания. Соответствующие имена переменных в выходе могут иметь любые символы Unicode®, включая символы non-ASCII и пробелы.

Примечание: В некоторых случаях, unstack должен изменить настоящие имена даже когда 'preserve' правило. Такие случаи включают:

  • Двойные названия

  • Имена, которые конфликтуют с табличными именами размерности

  • Имена, которые конфликтуют с зарезервированным именем.

  • Имена, длины которых превышают значение namelengthmax.

Выходные аргументы

свернуть все

Выведите таблицу, возвращенную как таблица или расписание. U содержит распакованные переменные данных, сгруппированные переменные и первое значение каждой группы от любых постоянных переменных.

Порядок данных в U основан на порядке уникальных значений в сгруппированных переменных.

Можно сохранить дополнительные метаданные, такие как описания, переменные модули, имена переменных и имена строки в U. Для получения дополнительной информации смотрите разделы Свойств table или timetable.

Индексируйте к S, возвращенный как вектор-столбец. Для каждой строки в U, вектор индекса, is, идентифицирует индекс первого значения в соответствующей группе строк в S.

Больше о

свернуть все

Группировка переменных

Сгруппированные переменные являются служебными переменными, используемыми, чтобы сгруппировать, или категоризировать, данные. Сгруппированные переменные полезны для суммирования или визуализации данных группой. Можно задать группы в таблице путем определения одной или нескольких сгруппированных переменных.

Сгруппированная переменная может быть любым следующим:

  • Категориальный вектор

  • Массив ячеек из символьных векторов

  • Массив строк

  • Массив символов

  • Числовой вектор, обычно содержащий положительные целые числа

  • Логический вектор

Строки, которые имеют то же значение сгруппированной переменной, принадлежат той же группе. Если вы используете несколько сгруппированных переменных, строки, которые имеют ту же комбинацию значений сгруппированной переменной, принадлежат той же группе.

Советы

  • Можно задать больше чем одну переменную данных в S, и каждая переменная становится набором распакованных переменных данных в U. Используйте вектор из положительных целых чисел, массива ячеек или массива строк, содержащего несколько имен переменных или логический вектор, чтобы задать vars. Одна переменная индикатора, заданная входным параметром, ivar, применяется ко всем переменным данных, задает vars.

Вопросы совместимости

развернуть все

Поведение изменяется в R2020a

Поведение изменяется в R2020a

Расширенные возможности

Введенный в R2013b