exponenta event banner

нестек

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

Описание

пример

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 имеет формат stacked, с 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и возвращает значение 0-by-0 double массив, затем unstack вставляет a NaN в выходную таблицу.

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

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

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

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

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

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

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

Значение 'VariableNamingRule'

Правило

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

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

'preserve'

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

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

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

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

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

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

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

свернуть все

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

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

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

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

Подробнее

свернуть все

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

Переменные группирования - это переменные утилиты, используемые для группирования или категоризации данных. Группирование переменных полезно для суммирования или визуализации данных по группам. Можно определить группы в таблице, указав одну или несколько переменных группировки.

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

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

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

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

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

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

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

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

Совет

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

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

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

В R2020a изменилось поведение

В R2020a изменилось поведение

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

.
Представлен в R2013b