unstack

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

Описание

пример

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

The 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 для удаления стека, заданного как положительное целое число, вектор положительных целых чисел, вектор символов, массив ячеек векторов символов, строковые массивы или логический вектор.

Переменная индикатора в 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 вызывает ошибку.

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

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

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

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

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

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

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

unstack вызывает ошибку.

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

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

Значение 'VariableNamingRule'

Правило

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

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

'preserve'

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

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

  • Повторяющиеся имена

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

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

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

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

свернуть все

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

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

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

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

Подробнее о

свернуть все

Сгруппированные переменные

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

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

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

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

  • Строковые массивы

  • Символьный массив

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

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

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

Совет

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

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

расширить все

Поведение изменено в R2020a

Поведение изменено в R2020a

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

.
Введенный в R2013b