Main Content

convertvars

table または timetable の変数を指定したデータ型に変換

説明

T2 = convertvars(T1,vars,dataType) は、指定された変数を指定されたデータ型に変換します。入力引数 T1 には、table または timetable を指定できます。

dataType はデータ型の名前として指定できますが、関数ハンドルとして指定することもできます。その場合は、vars で指定された変数の変換または変更を行う関数のハンドルです。同様に、varsT1 の変数名または変数の位置を含めることも、あるいは変数を識別する関数のハンドルにすることもできます。

すべて折りたたむ

停電のデータを含むスプレッドシートから table を読み取ります。table には、各停電について地域と原因を示すテキスト変数、停電時刻と復旧時刻を示す datetime 変数、および電力損失と影響を受けた顧客数を示す数値変数があります。最初の 5 行を表示します。

T1 = readtable('outages.csv');
head(T1,5)
       Region             OutageTime          Loss     Customers       RestorationTime              Cause       
    _____________    ____________________    ______    __________    ____________________    ___________________

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

変数 Region と変数 Cause を categorical 変数に変換します。categorical 値は引用符なしで表示されることがわかります。

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

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

異なる機能を提供するデータ型に変数を変換すると便利な場合があります。たとえば、T2.Region は categorical 変数となっているため、関数 pie を使用して、停電に関する地域別の円グラフを作成できます。しかし、T1.Region には categorical データではなくテキストが含まれているため、この変数を pie の入力引数として使用することはできません。

pie(T2.Region)

datetime 配列である table 変数を検出します。次に、関数 datetime を関数 convertvars の引数として使用し、タイム ゾーンと表示形式を指定します。

停電のデータを table に読み取り、最初の 3 行を表示します。

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

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

T1 の datetime 配列には、タイム ゾーンが設定されていません。table 変数の名前または位置を指定せずに、関数 isdatetime の "関数ハンドル" を使用して datetime 配列である変数を検出できます (関数ハンドルとは、関数への関連付けを格納する変数です。関数ハンドルを使用して、ある関数を他の関数に渡すことができます。たとえば、@isdatetime を指定して、そのハンドルを convertvars に渡します)。次に、あるタイム ゾーン、および異なる表示形式をもつように、すべての datetime 変数を変換できます。この手法は、すべて同じデータ型をもつ多くの table 変数を変換する場合に有効です。

関数 convertvars を呼び出します。所定の位置にあるタイム ゾーンと形式を変更するには、名前と値のペアの引数 'TimeZone''Format' を指定して関数 datetime を呼び出す "無名関数" を指定します (無名関数はプログラム ファイルに保存されません。これは、簡単な定義のみが必要な関数に便利です。この例では、複数の入力を指定して datetime を呼び出す一方で、convertvars の要求どおりに 1 つの入力のみを受け入れる関数を convertvars に渡すこともできます)。最初の 3 行を表示して、形式の変更されたことを示します。

modifyTimeZoneAndFormat = @(x)(datetime(x,'TimeZone','UTC','Format','MMM dd, yyyy, HH:mm z'));
T2 = convertvars(T1,@isdatetime,modifyTimeZoneAndFormat);
head(T2,3)
       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'}

入力引数

すべて折りたたむ

入力 table。table または timetable として指定します。

T1 が timetable の場合、timetable 変数には行時間が含まれないため、convertvars を使用して行時間を変換することはできません。行時間は、timetable メタデータです。

入力 table または入力 timetable の変数。string 配列、文字ベクトル、文字ベクトルの cell 配列、pattern スカラー、数値配列、logical 配列または関数ハンドルとして指定します。

vars が関数ハンドルの場合、その関数は 1 つの入力引数を受け入れ、データ型を識別し、logical スカラーを返さなければなりません。たとえば、数値変数を検出するには、関数 isnumeric を使用します。

例: T2 = convertvars(T1,'Region','categorical') は、変数 Region の型を変換します。

例: T2 = convertvars(T1,[1,3:6],'string') は、位置で指定された変数を string 配列に変換します。

例: T2 = convertvars(T1,@isnumeric,'int32') は、すべての数値変数を 32 ビット整数に変換します。

変換後の変数のデータ型。文字ベクトル、string スカラーまたは関数ハンドルとして指定します。

dataType が関数ハンドルの場合、その関数は 1 つの入力引数を受け入れ、別のデータ型に変換しなければなりません。たとえば、関数 string は、入力引数を string 配列に変換します。

次の表に、多くの共通なデータ型の名前を示します。

'single'単精度数
'double'倍精度数
'int8'符号付き 8 ビット整数
'int16'符号付き 16 ビット整数
'int32'符号付き 32 ビット整数
'int64'符号付き 64 ビット整数
'uint8'符号なしの 8 ビット整数
'uint16'符号なしの 16 ビット整数
'uint32'符号なしの 32 ビット整数
'uint64'符号なしの 64 ビット整数
'logical'logical 1 (true) または 0 (false)
'string'string 配列
'cell'cell 配列
'cellstr'文字ベクトルの cell 配列
'categorical'categorical 配列
'datetime'datetime 配列
'duration'duration 配列
'calendarDuration'カレンダー期間配列

データ型として 'char' を指定した場合、convertvars は、変数を文字配列に変換します。文字配列である table 変数または timetable 変数は作成しないことをお勧めします。代わりに、変数を string 配列、categorical 配列、または文字ベクトルの cell 配列に変換することを検討してください。

例: T2 = convertvars(T1,'OutageTime','datetime') は、変数 OutageTime の型を変換します。

例: T2 = convertvars(T1,'Region',@categorical) は、関数 categorical の関数ハンドルを使用して変数を変換します。

拡張機能

スレッドベースの環境
MATLAB® の backgroundPool を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool を使用してコードを高速化します。

バージョン履歴

R2018b で導入