Main Content

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

rows2vars

table または timetable の再配向による行の変数への変更

説明

T2 = rows2vars(T1) は、図のように、T1 の行を再配向し、出力 table T2 の変数となるようにします。rows2varsT1 の行の内容を連結できる場合、T2 の対応する変数は配列です。それ以外の場合、T2 の変数は cell 配列です。rows2vars は常に table を返しますが、T1 は table または timetable のいずれかです。

関数 rows2varsT1 の変数の名前を T2 の新しい変数にコピーします。T1 に行の名前または行時間が含まれる場合、その名前または時間が T2 の変数名となります。それ以外の場合、rows2vars は名前 Var1,…,VarNT2 の変数名として生成します。

T2 = rows2vars(T1,Name,Value) は、名前と値のペアの引数を 1 つ以上使用して追加の引数を指定します。たとえば、名前と値のペアの引数 'VariableNamesSource' を使用して、T2 の変数名のソースを指定できます。

すべて折りたたむ

table を作成し、その行が新しい table の変数となるように再配向します。

patients.mat ファイルからデータの配列を読み込みます。LastNameGenderAgeHeightWeight の各変数を含む table を作成します。

load patients
T1 = table(LastName,Gender,Age,Height,Weight);
head(T1,3)
ans=3×5 table
      LastName        Gender      Age    Height    Weight
    ____________    __________    ___    ______    ______

    {'Smith'   }    {'Male'  }    38       71       176  
    {'Johnson' }    {'Male'  }    43       69       163  
    {'Williams'}    {'Female'}    38       64       131  

T1 の行が出力 table の変数となるように再配向します。

T2 = rows2vars(T1);

T2 の最初の 4 つの変数を表示します。T2 の最初の変数には T1 の変数の名前が含まれます。T2 の残りの変数は T1 の行に対応します。T1 には行ラベルがなかったため、T2 の変数には既定の名前として Var1 から VarN (N は変数の数) までの名前が設定されます。

T2(:,1:4)
ans=5×4 table
    OriginalVariableNames      Var1          Var2            Var3    
    _____________________    _________    ___________    ____________

        {'LastName'}         {'Smith'}    {'Johnson'}    {'Williams'}
        {'Gender'  }         {'Male' }    {'Male'   }    {'Female'  }
        {'Age'     }         {[   38]}    {[     43]}    {[      38]}
        {'Height'  }         {[   71]}    {[     69]}    {[      64]}
        {'Weight'  }         {[  176]}    {[    163]}    {[     131]}

行名を含む table を作成します。table に行名がある場合、rows2vars は行名を変数名に変換します。

T3 = table(Gender,Age,Height,Weight,'RowNames',LastName);
head(T3,3)
ans=3×4 table
                  Gender      Age    Height    Weight
                __________    ___    ______    ______

    Smith       {'Male'  }    38       71       176  
    Johnson     {'Male'  }    43       69       163  
    Williams    {'Female'}    38       64       131  

T3 の行を再配向します。

T4 = rows2vars(T3);
T4(:,1:4)
ans=4×4 table
    OriginalVariableNames     Smith      Johnson      Williams 
    _____________________    ________    ________    __________

         {'Gender'}          {'Male'}    {'Male'}    {'Female'}
         {'Age'   }          {[  38]}    {[  43]}    {[    38]}
         {'Height'}          {[  71]}    {[  69]}    {[    64]}
         {'Weight'}          {[ 176]}    {[ 163]}    {[   131]}

timetabe を読み込んで表示します。

load bostonTT
Boston
Boston=6×3 timetable
           Time            Temp    WindSpeed    Rain
    ___________________    ____    _________    ____

    2016-06-09 06:03:00    59.5       0.1       0.05
    2016-06-09 12:00:23      63       2.3       0.08
    2016-06-09 18:02:57    61.7       3.1       0.13
    2016-06-10 06:01:47    55.4       5.7       0.15
    2016-06-10 12:06:00    62.3       2.6       0.87
    2016-06-10 18:02:57    58.8       6.2       0.33

その行が出力の変数となるように再配向します。関数 rows2vars は、行時間を名前に変換しますが、有効な変数名となるように変更します。また rows2vars によって返される出力引数は常に table となります。これは入力引数が timetable の場合でも同様です。

T = rows2vars(Boston)
Warning: Table variable names that were not valid MATLAB identifiers have been modified. Since table variable names must be unique, any table variable names that happened to match the new identifiers also have been modified.
To use the original row names as new variable names, set 'PreserveVariableNames' to true.
T=3×7 table
    OriginalVariableNames    x2016_06_0906_03_00    x2016_06_0912_00_23    x2016_06_0918_02_57    x2016_06_1006_01_47    x2016_06_1012_06_00    x2016_06_1018_02_57
    _____________________    ___________________    ___________________    ___________________    ___________________    ___________________    ___________________

        {'Temp'     }               59.5                     63                   61.7                   55.4                   62.3                   58.8        
        {'WindSpeed'}                0.1                    2.3                    3.1                    5.7                    2.6                    6.2        
        {'Rain'     }               0.05                   0.08                   0.13                   0.15                   0.87                   0.33        

R2020a 以降、入力 table または timetable から名前を取得し、それらを変更せずに出力 table 内の変数名として使用できます。元の名前を保持するには、名前と値のペアの引数 'VariableNamingRule' を使用します。

timetabe を読み込んで表示します。

load bostonTT
Boston
Boston=6×3 timetable
           Time            Temp    WindSpeed    Rain
    ___________________    ____    _________    ____

    2016-06-09 06:03:00    59.5       0.1       0.05
    2016-06-09 12:00:23      63       2.3       0.08
    2016-06-09 18:02:57    61.7       3.1       0.13
    2016-06-10 06:01:47    55.4       5.7       0.15
    2016-06-10 12:06:00    62.3       2.6       0.87
    2016-06-10 18:02:57    58.8       6.2       0.33

timetable を再配向して、その行時間が出力 table 内の変数名となるようにします。datetime 値を string に変換し、名前と値のペア 'VariableNamingRule' を使用して結果の名前を保持します。

T = rows2vars(Boston,'VariableNamingRule','preserve')
T=3×7 table
    OriginalVariableNames    2016-06-09 06:03:00    2016-06-09 12:00:23    2016-06-09 18:02:57    2016-06-10 06:01:47    2016-06-10 12:06:00    2016-06-10 18:02:57
    _____________________    ___________________    ___________________    ___________________    ___________________    ___________________    ___________________

        {'Temp'     }               59.5                     63                   61.7                   55.4                   62.3                   58.8        
        {'WindSpeed'}                0.1                    2.3                    3.1                    5.7                    2.6                    6.2        
        {'Rain'     }               0.05                   0.08                   0.13                   0.15                   0.87                   0.33        

日付は数値で始まるため、T 内の変数名は有効な MATLAB 識別子ではありません。ただし、そのような変数を参照するために、かっこを使用して、ドット表記を使用できます。

T.('2016-06-09 06:03:00')
ans = 3×1

   59.5000
    0.1000
    0.0500

データをスプレッドシートから table に読み取ります。最初の 3 行を表示します。

T1 = readtable('patients.xls');
head(T1,3)
ans=3×10 table
      LastName        Gender      Age              Location               Height    Weight    Smoker    Systolic    Diastolic    SelfAssessedHealthStatus
    ____________    __________    ___    _____________________________    ______    ______    ______    ________    _________    ________________________

    {'Smith'   }    {'Male'  }    38     {'County General Hospital'  }      71       176      true        124          93             {'Excellent'}      
    {'Johnson' }    {'Male'  }    43     {'VA Hospital'              }      69       163      false       109          77             {'Fair'     }      
    {'Williams'}    {'Female'}    38     {'St. Mary's Medical Center'}      64       131      false       125          83             {'Good'     }      

T1 の行を再配向し、新しい table T2 の変数にします。T1 の変数 LastNameT2 の変数の名前のソースになるように指定します。

T2 = rows2vars(T1,'VariableNamesSource','LastName');

T2 の最初の 4 つの変数を表示します。T2 の最初の変数には T1 の変数の名前が含まれます。T2 の残りの変数は T1 の行に対応します。

T2(:,1:4)
ans=9×4 table
       OriginalVariableNames                   Smith                   Johnson                  Williams           
    ____________________________    ___________________________    _______________    _____________________________

    {'Gender'                  }    {'Male'                   }    {'Male'       }    {'Female'                   }
    {'Age'                     }    {[                     38]}    {[         43]}    {[                       38]}
    {'Location'                }    {'County General Hospital'}    {'VA Hospital'}    {'St. Mary's Medical Center'}
    {'Height'                  }    {[                     71]}    {[         69]}    {[                       64]}
    {'Weight'                  }    {[                    176]}    {[        163]}    {[                      131]}
    {'Smoker'                  }    {[                      1]}    {[          0]}    {[                        0]}
    {'Systolic'                }    {[                    124]}    {[        109]}    {[                      125]}
    {'Diastolic'               }    {[                     93]}    {[         77]}    {[                       83]}
    {'SelfAssessedHealthStatus'}    {'Excellent'              }    {'Fair'       }    {'Good'                     }

T2.Smith 内のデータを表示します。この例では、T2 のすべての変数が 9 行 1 列の cell 配列です。これは T1 の行の値を連結して配列にすることができないためです。

T2.Smith
ans=9×1 cell array
    {'Male'                   }
    {[                     38]}
    {'County General Hospital'}
    {[                     71]}
    {[                    176]}
    {[                      1]}
    {[                    124]}
    {[                     93]}
    {'Excellent'              }

データをスプレッドシートから table に読み取ります。スプレッドシートの最初の列を table の行名として使用します。最初の 3 行を表示します。

T1 = readtable('patients.xls','ReadRowNames',true);
head(T1,3)
ans=3×9 table
                  Gender      Age              Location               Height    Weight    Smoker    Systolic    Diastolic    SelfAssessedHealthStatus
                __________    ___    _____________________________    ______    ______    ______    ________    _________    ________________________

    Smith       {'Male'  }    38     {'County General Hospital'  }      71       176      true        124          93             {'Excellent'}      
    Johnson     {'Male'  }    43     {'VA Hospital'              }      69       163      false       109          77             {'Fair'     }      
    Williams    {'Female'}    38     {'St. Mary's Medical Center'}      64       131      false       125          83             {'Good'     }      

T1 で指定した変数を再配向して、残りを破棄します。データ変数を名前で指定するには、文字ベクトルの cell 配列を使用します。

T2 = rows2vars(T1,'DataVariables',{'Gender','Age','Height','Weight'});
T2(:,1:4)
ans=4×4 table
    OriginalVariableNames     Smith      Johnson      Williams 
    _____________________    ________    ________    __________

         {'Gender'}          {'Male'}    {'Male'}    {'Female'}
         {'Age'   }          {[  38]}    {[  43]}    {[    38]}
         {'Height'}          {[  71]}    {[  69]}    {[    64]}
         {'Weight'}          {[ 176]}    {[ 163]}    {[   131]}

また、入力 table 内の位置でデータ変数を指定することもできます。変数の位置を指定するには、数値配列を使用します。

T3 = rows2vars(T1,'DataVariables',[1 2 6:9]);
T3(:,1:4)
ans=6×4 table
       OriginalVariableNames            Smith        Johnson      Williams 
    ____________________________    _____________    ________    __________

    {'Gender'                  }    {'Male'     }    {'Male'}    {'Female'}
    {'Age'                     }    {[       38]}    {[  43]}    {[    38]}
    {'Smoker'                  }    {[        1]}    {[   0]}    {[     0]}
    {'Systolic'                }    {[      124]}    {[ 109]}    {[   125]}
    {'Diastolic'               }    {[       93]}    {[  77]}    {[    83]}
    {'SelfAssessedHealthStatus'}    {'Excellent'}    {'Fair'}    {'Good'  }

入力引数

すべて折りたたむ

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

名前と値のペアの引数

オプションの Name,Value の引数ペアをコンマ区切りで指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を任意の順序で指定できます。

例: 'VariableNamingRule','preserve' は、T1 から取得した元の名前を有効な MATLAB® 識別子となるように変更せずに保持します。

変数名を含む T1 内の変数。'VariableNamesSource' と文字ベクトル、string スカラー、正の整数または logical ベクトルで構成されるコンマ区切りのペアとして指定します。関数 rows2vars は、表に示すように 'VariableNamesSource' の値を解釈します。

'VariableNamesSource' の値

意味

文字ベクトルまたは string スカラー

入力 table T1 内の変数の名前。

整数 n

T1 内の n 番目の変数。

長さが T1 内の変数の数と一致する logical ベクトル

n 番目の要素は 1 (true) であり、T1n 番目の変数に対応します。他のすべての要素は 0 (false) です。

'VariableNamesSource' の値は table 変数を指定する名前、数値、または logical 配列でなければなりませんが、変数自体はどのデータ型でもかまいません。ただし、次の制限があります。

  • 指定した table 変数に含まれる値は、値を string に変換できるデータ型でなければなりません。たとえば、datetime 値は string に変換できるため、'VariableNamesSource' の値は datetime 配列を含む table 変数の名前にすることができます。

  • 指定した table 変数から取得する名前の数は、入力 table の行数と一致しなければなりません。

選択された T1 の変数。'DataVariables' と文字ベクトル、文字ベクトルの cell 配列、string 配列、正の整数、正の整数のベクトル、logical ベクトルまたは添字オブジェクトで構成されるコンマ区切りのペアとして指定します。rows2vars は、'DataVariables' の値で指定した変数を選択し、その変数だけが T2 の行となるように再配向します。T1 の残りの変数は破棄されます。

T2 内の変数の命名規則。'VariableNamingRule' と、値 'modify' または値 'preserve' で構成されるコンマ区切りのペアとして指定します。

'VariableNamingRule' の値は、出力 table または timetable 内の変数について、次の命名規則を指定します。

'VariableNamingRule' の値

規則

'modify' (既定)

出力内の対応する変数名が有効な MATLAB 識別子となるように、入力 table または timetable から取得された名前を変更します。

'preserve'

入力 table または timetable から取得された元の名前を保持します。出力内の対応する変数名には、空白や非 ASCII 文字を含む任意の Unicode® 文字を使用できます。

メモ: 場合によっては、'preserve' が規則であっても、rows2vars は元の名前を変更しなければなりません。次のような場合が含まれます。

  • 重複した名前

  • table の次元名と競合する名前

  • 予約名と競合する名前

  • namelengthmax の値を超える長さの名前

R2018a で導入