exponenta event banner

convertvars

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

Описание

пример

T2 = convertvars(T1,vars,dataType) преобразует указанные переменные в указанный тип данных. Входной аргумент T1 может быть таблицей или расписанием.

Пока можно указать dataType в качестве имени типа данных можно также указать его как дескриптор функции. В этом случае это дескриптор функции, которая преобразует или иным образом изменяет переменные, указанные vars. Аналогично, vars может содержать имена переменных или позиции переменных в T1или это может быть дескриптор функции, идентифицирующей переменные.

Примеры

свернуть все

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

T1 = readtable('outages.csv');
head(T1,5)
ans=5×6 table
       Region           OutageTime        Loss     Customers     RestorationTime            Cause       
    _____________    ________________    ______    __________    ________________    ___________________

    {'SouthWest'}    2002-02-01 12:18    458.98    1.8202e+06    2002-02-07 16:50    {'winter storm'   }
    {'SouthEast'}    2003-01-23 00:49    530.14    2.1204e+05                 NaT    {'winter storm'   }
    {'SouthEast'}    2003-02-07 21:15     289.4    1.4294e+05    2003-02-17 08:14    {'winter storm'   }
    {'West'     }    2004-04-06 05:44    434.81    3.4037e+05    2004-04-06 06:10    {'equipment fault'}
    {'MidWest'  }    2002-03-16 06:18    186.44    2.1275e+05    2002-03-18 23:23    {'severe storm'   }

Преобразование переменных Region и Cause к категориальным переменным. Обратите внимание, что категориальные значения не отображаются в кавычках.

T2 = convertvars(T1,{'Region','Cause'},'categorical');
head(T2,5)
ans=5×6 table
     Region         OutageTime        Loss     Customers     RestorationTime          Cause     
    _________    ________________    ______    __________    ________________    _______________

    SouthWest    2002-02-01 12:18    458.98    1.8202e+06    2002-02-07 16:50    winter storm   
    SouthEast    2003-01-23 00:49    530.14    2.1204e+05                 NaT    winter storm   
    SouthEast    2003-02-07 21:15     289.4    1.4294e+05    2003-02-17 08:14    winter storm   
    West         2004-04-06 05:44    434.81    3.4037e+05    2004-04-06 06:10    equipment fault
    MidWest      2002-03-16 06:18    186.44    2.1275e+05    2002-03-18 23:23    severe storm   

Может быть удобно преобразовывать переменные в типы данных, которые предлагают различные функциональные возможности. Например, сейчас, когда T2.Region является категориальной переменной, можно использовать pie функция, чтобы составить круговую диаграмму отключений электроэнергии по регионам. Но вы не можете использовать T1.Region в качестве входного аргумента для pie, поскольку эта переменная содержит текст, а не категориальные данные.

pie(T2.Region)

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

Считайте данные об отключении питания в таблицу и просмотрите первые три строки.

T1 = readtable('outages.csv');
head(T1,3)
ans=3×6 table
       Region           OutageTime        Loss     Customers     RestorationTime          Cause      
    _____________    ________________    ______    __________    ________________    ________________

    {'SouthWest'}    2002-02-01 12:18    458.98    1.8202e+06    2002-02-07 16:50    {'winter storm'}
    {'SouthEast'}    2003-01-23 00:49    530.14    2.1204e+05                 NaT    {'winter storm'}
    {'SouthEast'}    2003-02-07 21:15     289.4    1.4294e+05    2003-02-17 08:14    {'winter storm'}

Массивы datetime в T1 не имеют установленных часовых поясов. Без указания имен или расположений переменных таблицы можно определить, какие переменные являются массивами datetime, с помощью дескриптора функции isdatetime функция. (Дескриптор функции - это переменная, которая сохраняет связь с функцией. Можно использовать дескриптор функции для передачи функции другой функции. Например, укажите @isdatetime для передачи дескриптора в convertvars.) Затем можно преобразовать все переменные datetime так, чтобы они имели часовой пояс и другой формат отображения. Этот метод полезен при преобразовании многих переменных таблицы, которые имеют одинаковый тип данных.

Позвоните в convertvars функция. Чтобы изменить часовой пояс и формат, укажите анонимную функцию, вызывающую datetime функции с помощью 'TimeZone' и 'Format' аргументы пары имя-значение. (Анонимная функция не хранится в файле программы. Это может быть полезно для функции, которая требует только краткого определения. В этом случае это также позволяет вызову datetime с несколькими входами, при прохождении convertvars функция, которая принимает только один вход, как convertvars требует.) Просмотрите первые три строки, показывающие изменение формата.

modifyTimeZoneAndFormat = @(x)(datetime(x,'TimeZone','UTC','Format','MMM dd, yyyy, HH:mm z'));
T2 = convertvars(T1,@isdatetime,modifyTimeZoneAndFormat);
head(T2,3)
ans=3×6 table
       Region              OutageTime            Loss     Customers         RestorationTime             Cause      
    _____________    _______________________    ______    __________    _______________________    ________________

    {'SouthWest'}    Feb 01, 2002, 12:18 UTC    458.98    1.8202e+06    Feb 07, 2002, 16:50 UTC    {'winter storm'}
    {'SouthEast'}    Jan 23, 2003, 00:49 UTC    530.14    2.1204e+05                        NaT    {'winter storm'}
    {'SouthEast'}    Feb 07, 2003, 21:15 UTC     289.4    1.4294e+05    Feb 17, 2003, 08:14 UTC    {'winter storm'}

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

свернуть все

Входная таблица, заданная как таблица или расписание.

Если T1 является расписанием, то вы не можете использовать convertvars для преобразования времени строки, поскольку время строки не содержится в переменной расписания. Время строки - метаданные расписания.

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

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

Пример: T2 = convertvars(T1,'Region','categorical') преобразует тип переменной Region.

Пример: T2 = convertvars(T1,[1,3:6],'string') преобразует переменные, заданные позицией, в массивы строк.

Пример: T2 = convertvars(T1,@isnumeric,'int32') преобразует все числовые переменные в 32-разрядные целые числа.

Тип данных преобразованных переменных, указанный как символьный вектор, строковый скаляр или дескриптор функции.

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

В таблице представлены имена многих распространенных типов данных.

'single'Номер с одной точностью
'double'Число с двойной точностью
'int8'Целое число со знаком 8 бит
'int16'Знаковое 16-разрядное целое число
'int32'Подписанное 32-разрядное целое число
'int64'Подписанное 64-разрядное целое число
'uint8'Беззнаковое 8-разрядное целое число
'uint16'Беззнаковое 16-разрядное целое число
'uint32'Беззнаковое 32-разрядное целое число
'uint64'Беззнаковое 64-разрядное целое число
'logical'Логичный 1 (true) или 0 (false)
'string'Строковый массив
'cell'Массив ячеек
'cellstr'Массив ячеек символьных векторов
'categorical'Категориальный массив
'datetime'Массив Datetime
'duration'Массив длительности
'calendarDuration'Массив длительности календаря

При указании 'char' как тип данных, то convertvars преобразует переменные в символьные массивы. Рекомендуется избегать создания переменных таблицы или расписания, которые являются массивами символов. Вместо этого рекомендуется преобразовать переменные в строковые массивы, категориальные массивы или массивы ячеек символьных векторов.

Пример: T2 = convertvars(T1,'OutageTime','datetime') преобразует тип переменной OutageTime.

Пример: T2 = convertvars(T1,'Region',@categorical) преобразует переменную с помощью дескриптора функции в categorical функция.

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

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