Main Content

table 変数の追加、削除、再配列

この例では、table で列方向の変数を追加、削除、および再配列する方法を示します。addvarsmovevarsremovevars の各関数を使用して、table 変数の追加、移動、削除を行えます。または、ドット構文を使用するか table へのインデックス付けによって table 変数を変更することもできます。複数列の変数を分割したり、複数の変数を 1 つにするには、関数 splitvars および mergevars を使用します。最後に、table の行が出力 table の変数になるよう table を再配向するには、関数 rows2vars を使用します。

変数エディターを使って table 変数を変更することもできます。

サンプル データの読み込みと table の作成

patients MAT ファイルからサンプル データの配列を読み込みます。ワークスペースに読み込まれた変数の名前とサイズを表示します。

load patients
whos -file patients
  Name                            Size            Bytes  Class      Attributes

  Age                           100x1               800  double               
  Diastolic                     100x1               800  double               
  Gender                        100x1             11412  cell                 
  Height                        100x1               800  double               
  LastName                      100x1             11616  cell                 
  Location                      100x1             14208  cell                 
  SelfAssessedHealthStatus      100x1             11540  cell                 
  Smoker                        100x1               100  logical              
  Systolic                      100x1               800  double               
  Weight                        100x1               800  double               

2 つの table を作成します。1 つの table T には患者へのアンケートから収集された情報を含め、もう 1 つの table T2 には患者の測定データを含めます。各 table には 100 行あります。

T = table(Age,SelfAssessedHealthStatus,Smoker);
T.SelfAssessedHealthStatus = string(T.SelfAssessedHealthStatus);
T2 = table(Height,Weight,Systolic,Diastolic);

各テーブルの最初の 5 行を表示します。

head(T,5)
    Age    SelfAssessedHealthStatus    Smoker
    ___    ________________________    ______

    38           "Excellent"           true  
    43           "Fair"                false 
    38           "Good"                false 
    40           "Fair"                false 
    49           "Good"                false 
head(T2,5)
    Height    Weight    Systolic    Diastolic
    ______    ______    ________    _________

      71       176        124          93    
      69       163        109          77    
      64       131        125          83    
      67       133        117          75    
      64       119        122          80    

別の table から連結した変数の追加

table TT2 と水平に連結して変数を追加します。

T = [T T2];

T の最初の 5 行を表示します。

head(T,5)
    Age    SelfAssessedHealthStatus    Smoker    Height    Weight    Systolic    Diastolic
    ___    ________________________    ______    ______    ______    ________    _________

    38           "Excellent"           true        71       176        124          93    
    43           "Fair"                false       69       163        109          77    
    38           "Good"                false       64       131        125          83    
    40           "Fair"                false       67       133        117          75    
    49           "Good"                false       64       119        122          80    

table T に 7 個の変数と 100 行が含まれるようになりました。

水平に連結する table に行名が含まれている場合、horzcat は行名をマッチングして table を連結します。したがって、これらのテーブルでは同じ行名を使用しなければなりません。ただし、行の順序は関係ありません。

ワークスペースから table への変数の追加

ワークスペース変数 LastName からの患者の名前を T の最初の table 変数の前に追加します。新しい場所の近くにある変数の名前を使用して、table 内の任意の場所を指定できます。table 変数の名前を参照するには引用符を使用します。ただし、ワークスペース変数である入力引数には引用符を使用しないでください。

T = addvars(T,LastName,'Before',"Age");
T.LastName = string(T.LastName);
head(T,5)
     LastName     Age    SelfAssessedHealthStatus    Smoker    Height    Weight    Systolic    Diastolic
    __________    ___    ________________________    ______    ______    ______    ________    _________

    "Smith"       38           "Excellent"           true        71       176        124          93    
    "Johnson"     43           "Fair"                false       69       163        109          77    
    "Williams"    38           "Good"                false       64       131        125          83    
    "Jones"       40           "Fair"                false       67       133        117          75    
    "Brown"       49           "Good"                false       64       119        122          80    

数値を使って table 内の場所を指定することもできます。たとえば、数値を使って場所を指定する等価の構文は T = addvars(T,LastName,'Before',1) です。

ドット構文を使用した変数の追加

新しい table 変数を追加する代替方法として、ドット構文の使用があります。ドット構文を使用する場合は常に、新しい変数を最後の table 変数として追加します。変数に table と同数の行があれば、任意のデータ型をもつ変数を追加できます。

2 つの変数 SystolicDiastolic を水平連結して血圧に関する新しい変数を作成します。これを T に追加します。

T.BloodPressure = [Systolic Diastolic];
head(T,5)
     LastName     Age    SelfAssessedHealthStatus    Smoker    Height    Weight    Systolic    Diastolic    BloodPressure
    __________    ___    ________________________    ______    ______    ______    ________    _________    _____________

    "Smith"       38           "Excellent"           true        71       176        124          93         124     93  
    "Johnson"     43           "Fair"                false       69       163        109          77         109     77  
    "Williams"    38           "Good"                false       64       131        125          83         125     83  
    "Jones"       40           "Fair"                false       67       133        117          75         117     75  
    "Brown"       49           "Good"                false       64       119        122          80         122     80  

T に 9 個の変数と 100 行が含まれるようになりました。table 変数は複数の列をもつことができます。よって、BloodPressure は 2 つの列をもちますが、1 つの table 変数です。

各患者のボディマス指数を含む新しい変数 BMI を table T に追加します。BMI は身長と体重の関数です。BMI を計算する際、T 内にある Weight および Height の変数を参照できます。

T.BMI = (T.Weight*0.453592)./(T.Height*0.0254).^2;

BMI の計算式で使用されている演算子 ./.^ は、それぞれ要素単位での除算とべき乗を示しています。

table T の最初の 5 行を表示します。

head(T,5)
     LastName     Age    SelfAssessedHealthStatus    Smoker    Height    Weight    Systolic    Diastolic    BloodPressure     BMI  
    __________    ___    ________________________    ______    ______    ______    ________    _________    _____________    ______

    "Smith"       38           "Excellent"           true        71       176        124          93         124     93      24.547
    "Johnson"     43           "Fair"                false       69       163        109          77         109     77      24.071
    "Williams"    38           "Good"                false       64       131        125          83         125     83      22.486
    "Jones"       40           "Fair"                false       67       133        117          75         117     75      20.831
    "Brown"       49           "Good"                false       64       119        122          80         122     80      20.426

table 内の変数の移動

関数 movevars を使用して table 変数 BMI が、変数 Weight の後ろになるように移動させます。table 変数を名前で指定する場合、引用符を使用します。

T = movevars(T,"BMI",'After',"Weight");
head(T,5)
     LastName     Age    SelfAssessedHealthStatus    Smoker    Height    Weight     BMI      Systolic    Diastolic    BloodPressure
    __________    ___    ________________________    ______    ______    ______    ______    ________    _________    _____________

    "Smith"       38           "Excellent"           true        71       176      24.547      124          93         124     93  
    "Johnson"     43           "Fair"                false       69       163      24.071      109          77         109     77  
    "Williams"    38           "Good"                false       64       131      22.486      125          83         125     83  
    "Jones"       40           "Fair"                false       67       133      20.831      117          75         117     75  
    "Brown"       49           "Good"                false       64       119      20.426      122          80         122     80  

数値を使って table 内の場所を指定することもできます。たとえば、数値を使って場所を指定する等価の構文は T = movevars(T,"BMI",'After',6) です。多くの場合は、名前で変数を参照する方が便利です。

インデックスを使用した table 変数の移動

代替方法として、インデックスを使って table 変数を移動することができます。table へのインデックス付けには行列へのインデックス付けと同じ構文を使用できます。

BloodPressureBMI の横に移動します。

T = T(:,[1:7 10 8 9]);
head(T,5)
     LastName     Age    SelfAssessedHealthStatus    Smoker    Height    Weight     BMI      BloodPressure    Systolic    Diastolic
    __________    ___    ________________________    ______    ______    ______    ______    _____________    ________    _________

    "Smith"       38           "Excellent"           true        71       176      24.547     124     93        124          93    
    "Johnson"     43           "Fair"                false       69       163      24.071     109     77        109          77    
    "Williams"    38           "Good"                false       64       131      22.486     125     83        125          83    
    "Jones"       40           "Fair"                false       67       133      20.831     117     75        117          75    
    "Brown"       49           "Good"                false       64       119      20.426     122     80        122          80    

変数の数が多い table では、関数 movevars を使用する方が便利なことがよくあります。

変数の削除

table 変数を削除するには、関数 removevars を使用します。Systolic および Diastolic の table 変数を削除します。

T = removevars(T,["Systolic","Diastolic"]);
head(T,5)
     LastName     Age    SelfAssessedHealthStatus    Smoker    Height    Weight     BMI      BloodPressure
    __________    ___    ________________________    ______    ______    ______    ______    _____________

    "Smith"       38           "Excellent"           true        71       176      24.547     124     93  
    "Johnson"     43           "Fair"                false       69       163      24.071     109     77  
    "Williams"    38           "Good"                false       64       131      22.486     125     83  
    "Jones"       40           "Fair"                false       67       133      20.831     117     75  
    "Brown"       49           "Good"                false       64       119      20.426     122     80  

ドット構文を使用した変数の削除

代替方法として、ドット構文と空の行列 [] を使用して変数を削除することができます。table から変数 Age を削除します。

T.Age = [];
head(T,5)
     LastName     SelfAssessedHealthStatus    Smoker    Height    Weight     BMI      BloodPressure
    __________    ________________________    ______    ______    ______    ______    _____________

    "Smith"             "Excellent"           true        71       176      24.547     124     93  
    "Johnson"           "Fair"                false       69       163      24.071     109     77  
    "Williams"          "Good"                false       64       131      22.486     125     83  
    "Jones"             "Fair"                false       67       133      20.831     117     75  
    "Brown"             "Good"                false       64       119      20.426     122     80  

インデックスを使用した変数の削除

インデックスと空の行列 [] を使用して変数を削除することもできます。table から変数 SelfAssessedHealthStatus を削除します。

T(:,"SelfAssessedHealthStatus") = [];
head(T,5)
     LastName     Smoker    Height    Weight     BMI      BloodPressure
    __________    ______    ______    ______    ______    _____________

    "Smith"       true        71       176      24.547     124     93  
    "Johnson"     false       69       163      24.071     109     77  
    "Williams"    false       64       131      22.486     125     83  
    "Jones"       false       67       133      20.831     117     75  
    "Brown"       false       64       119      20.426     122     80  

table 変数の分割とマージ

複数列の table 変数を、それぞれが 1 列をもつ変数に分割するには、関数 splitvars を使用します。変数 BloodPressure を 2 つの変数に分割します。

T = splitvars(T,"BloodPressure",'NewVariableNames',["Systolic","Diastolic"]);
head(T,5)
     LastName     Smoker    Height    Weight     BMI      Systolic    Diastolic
    __________    ______    ______    ______    ______    ________    _________

    "Smith"       true        71       176      24.547      124          93    
    "Johnson"     false       69       163      24.071      109          77    
    "Williams"    false       64       131      22.486      125          83    
    "Jones"       false       67       133      20.831      117          75    
    "Brown"       false       64       119      20.426      122          80    

同様に、関数 mergevars を使用して関連する table 変数を 1 つの変数にグループ化することができます。SystolicDiastolic を組み合わせて 1 つの変数に戻し、BP という名前にします。

T = mergevars(T,["Systolic","Diastolic"],'NewVariableName',"BP");
head(T,5)
     LastName     Smoker    Height    Weight     BMI          BP    
    __________    ______    ______    ______    ______    __________

    "Smith"       true        71       176      24.547    124     93
    "Johnson"     false       69       163      24.071    109     77
    "Williams"    false       64       131      22.486    125     83
    "Jones"       false       67       133      20.831    117     75
    "Brown"       false       64       119      20.426    122     80

行を再配向して変数にする

関数 rows2vars を使用して、table または timetable の行を出力 table の変数になるように再配向することができます。ただし、table に複数列の変数がある場合、rows2vars を呼び出す前に、それらを分割しなければなりません。

T の行を再配向します。T にある患者の名前が、出力 table の table 変数の名前であることを指定します。T3 の最初の変数には T の変数の名前が含まれます。T3 の残りの各変数には、T の対応する行からのデータが含まれます。

T = splitvars(T,"BP",'NewVariableNames',["Systolic","Diastolic"]);
T3 = rows2vars(T,'VariableNamesSource',"LastName");
T3(:,1:5)
ans=6×5 table
    OriginalVariableNames    Smith     Johnson    Williams    Jones 
    _____________________    ______    _______    ________    ______

        {'Smoker'   }             1         0           0          0
        {'Height'   }            71        69          64         67
        {'Weight'   }           176       163         131        133
        {'BMI'      }        24.547    24.071      22.486     20.831
        {'Systolic' }           124       109         125        117
        {'Diastolic'}            93        77          83         75

T3 にドット構文を使用して、患者データに配列としてアクセスできます。ただし、入力 table の行の値を連結できない場合には、出力 table の変数が cell 配列になります。

T3.Smith
ans = 6×1

    1.0000
   71.0000
  176.0000
   24.5467
  124.0000
   93.0000

参考

| | | | | | |

関連するトピック