Разбиение данных одной переменной на несколько переменных
преобразует таблицу или расписание, 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.
Создайте таблицу с указанием количества снегопадов в различных городах для различных штормов. Укажите города с помощью 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 - Входная таблицаВходная таблица, заданная как таблица или расписание. S должен содержать переменные данных, которые должны быть сброшены, varsи переменная индикатора, ivar. Остальные переменные в S может рассматриваться как группирующие переменные или постоянные переменные.
vars - Переменные в S не сложитьПеременные в S разбиение, указанное как положительное целое число, вектор положительных целых чисел, символьный вектор, клеточный массив символьных векторов, строковый массив или логический вектор.
ivar - Переменная индикатора в SПеременная индикатора в S, задается как положительное целое число, символьный вектор или строковый скаляр. Значения в переменной, указанной ivar указать, какие переменные в U содержат элементы, взятые из переменных, указанных vars.
Переменная, указанная ivar может быть числовым вектором, логическим вектором, символьным массивом, массивом ячеек символьных векторов, строковым массивом или категориальным вектором.
Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.
'AggregationFunction',@mean применяет функцию агрегации @mean к значениям в vars.'GroupingVariables' - Группирование переменных в S которые определяют группы строкГруппирование переменных в S которые определяют группы строк, указанные как разделенная запятыми пара, состоящая из 'GroupingVariables' и положительное целое число, вектор положительных целых чисел, символьный вектор, клеточный массив символьных векторов, строковый массив или логический вектор. Каждая группа строк в S становится одной строкой в U.
S может иметь метки строк вдоль первого размера. Если S является таблицей, то она может иметь имена строк в качестве меток. Если S является расписанием, то оно должно иметь время строки в качестве меток. unstack может рассматривать метки строк как переменные группировки.
Если не указать 'GroupingVariables', и S является расписанием, то unstack обрабатывает время строки как переменную группировки.
При указании 'GroupingVariables', и S имеет имена строк или время строк, то unstack не рассматривает их как переменные группировки, если только вы не включаете их в значение 'GroupingVariables'.
'ConstantVariables' - Константа переменных в группеКонстанта переменных в группе, заданная как разделенная запятыми пара, состоящая из 'ConstantVariables' и положительное целое число, вектор положительных целых чисел, символьный вектор, клеточный массив символьных векторов, строковый массив или логический вектор.
Значения для этих переменных в U берутся из первой строки в каждой группе в S.
Можно включить имена строк или их время S при указании значения 'ConstantVariables'.
'NewDataVariableNames' - Имена новых переменных данных в UИмена новых переменных данных в U, указанная как пара, разделенная запятыми, состоящая из 'NewDataVariableNames' и массив ячеек из векторов символов или строкового массива.
Если не указать 'NewDataVariableNames', то unstack создает имена для новых переменных данных в U на основе значений в переменной индикатора, указанной ivar.
'AggregationFunction' - Функция агрегации из значений в vars в одно значение@sum (числовые данные) или @unique (нечисловые данные) (по умолчанию) | дескриптор функцииФункция агрегации из значений в vars к одному значению, указанному как пара, разделенная запятыми, состоящая из 'AggregationFunction' и дескриптор функции. unstack применяет эту функцию к строкам из одной группы, имеющим одинаковое значение в ivar. Функция должна агрегировать значения данных в одно значение.
Если значение не указано 'AggregationFunction', то unstack использует различные функции агрегирования по умолчанию в зависимости от типа данных.
Для числовых данных по умолчанию используется функция агрегации sum.
Для нечисловых данных по умолчанию используется функция агрегации unique.
Если нет значений данных для агрегирования, потому что нет значений данных, соответствующих заданному значению индикатора в ivar после расфиксации, затем unstack должен заполнить пустой элемент в неупакованной выходной таблице. В этом случае unstack вызывает функцию агрегации с пустым массивом в качестве входных данных. Значение, которое unstack заполнение зависит от того, что возвращает функция агрегирования, если ее вход является пустым массивом.
Значение, возвращаемое функцией агрегации при отсутствии данных для агрегации | Значение, вставленное в пустые элементы неупакованной таблицы |
|---|---|
Функция агрегации вызывает ошибку |
|
Пустой массив | Значение заполнения соответствующего типа данных ( Пример: Если функция агрегации |
Скалярное значение | Скалярное значение, возвращаемое из функции агрегации. Пример: Если функция агрегации |
Вектор, матрица или многомерный массив |
|
'VariableNamingRule' - Правило именования переменных в U'modify' (по умолчанию) | 'preserve'Правило именования переменных в U, указанная как пара, разделенная запятыми, состоящая из 'VariableNamingRule' и либо значение 'modify' или 'preserve'.
Значения 'VariableNamingRule' укажите следующие правила именования переменных в выходной таблице или расписании.
Значение | Правило |
|---|---|
| Измените имена, взятые из входной таблицы или расписания, так, чтобы имена соответствующих переменных в выходных данных также были действительными идентификаторами MATLAB ®. |
| Сохраните исходные имена, взятые из входной таблицы или расписания. Имена соответствующих переменных в выходных данных могут содержать любые символы Юникода ®, включая пробелы и символы, не относящиеся к ASCII. Примечание: В некоторых случаях
|
U - Выходная таблицаВыходная таблица, возвращаемая как таблица или расписание. U содержит неупакованные переменные данных, переменные группировки и первое значение каждой группы из любых переменных констант.
Порядок данных в U основан на порядке уникальных значений в переменных группировки.
Можно хранить дополнительные метаданные, такие как описания, единицы измерения переменных, имена переменных и имена строк в U. Дополнительные сведения см. в разделах «Свойства» table или timetable.
is - Индекс для SИндекс в S, возвращается в виде вектора столбца. Для каждой строки в U, вектор индекса, is, определяет индекс первого значения в соответствующей группе строк в S.
Переменные группирования - это переменные утилиты, используемые для группирования или категоризации данных. Группирование переменных полезно для суммирования или визуализации данных по группам. Можно определить группы в таблице, указав одну или несколько переменных группировки.
Переменная группирования может быть любой из следующих:
Категориальный вектор
Массив ячеек символьных векторов
Строковый массив
Символьный массив
Числовой вектор, обычно содержащий положительные целые числа
Логический вектор
Строки с одинаковым значением переменной группировки принадлежат к одной группе. При использовании нескольких переменных группирования строки с одинаковой комбинацией значений переменных группирования принадлежат к одной группе.
В можно указать несколько переменных данных S, и каждая переменная становится набором неупакованных переменных данных в U. Используйте вектор положительных целых чисел, массив ячеек или строковый массив, содержащий несколько имен переменных, или логический вектор для задания vars. Переменная одного индикатора, заданная входным аргументом, ivar, применяется ко всем переменным данных, указанным vars.
В R2020a изменилось поведение
В R2020a, если не указать 'AggregationFunction' аргумент пары «имя-значение», то функция агрегации по умолчанию для нечисловых данных unique функция. В предыдущих версиях отсутствовала функция агрегации по умолчанию для нечисловых данных, поэтому unstack вызовет ошибку.
В R2020a изменилось поведение
В R2020a, изменения поведения происходят, когда функция агрегации не имеет данных для агрегации. Эта ситуация может возникнуть, когда после отмены сортировки нет значений данных, соответствующих значениям в переменной индикатора. В таких случаях unstack по существу вызывает функцию агрегации в пустом массиве.
Значение, возвращаемое функцией агрегации при отсутствии данных для агрегации | Поведение в R2020a | Поведение в предыдущих версиях |
|---|---|---|
Переменная данных является числовой, и функция агрегации вызывает ошибку. |
|
|
Переменная данных не является числовой, и функция агрегации возвращает пустой массив. |
|
|
Переменная данных является числовой, и функция агрегации возвращает скалярное значение (например, |
|
|
Переменная данных является числовой, и функция агрегации возвращает вектор, матрицу или многомерный массив. |
|
|
Примечания и ограничения по использованию:
'NewDataVariableNames' должен быть указан аргумент name-value. Его значение должно быть постоянным.
vars и ivars входные аргументы (переменные данных и переменные индикаторов) должны быть постоянными.
Если указать переменные группировки и переменные константы, они должны быть постоянными.
Если указана функция агрегации, она должна быть постоянной.
Если входные данные представляют собой расписание с регулярным временем строк и задаются переменные группировки, которые не включают время строк, то расписание вывода может иметь нерегулярное время строк. Несмотря на то, что интервалы между временами выходных строк могут выглядеть одинаково, расписание вывода считает, что вектор времен строк является нерегулярным.
Если переменная входной таблицы или расписания является массивом ячеек символьных векторов, то unstack заполняет пустые ячейки в соответствующей выходной переменной массивами символов 1 на 0 в сгенерированном коде. В MATLAB, unstack заполняет такие промежутки массивами символов 0 на 0.
unstack функция не поддерживает генерацию кода, когда входная таблица или расписание имеет переменную, которая является гетерогенным массивом ячеек, который не может быть преобразован в однородный массив ячеек.
Если вход имеет переменную, которая является однородным массивом ячеек, или которая может быть преобразована в одну, то 'AggregationFunction' должен быть указан аргумент name-value. Значение по умолчанию 'AggregationFunction' является 'unique'. Но unique функция не поддерживает массивы ячеек.
join | Объединить таблицы | stack | Переменные таблицы стека | Переменные таблицы Unstack
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.