table 変数の追加、削除、再配列
この例では、table で列方向の変数を追加、削除、および再配列する方法を示します。addvars
、movevars
、removevars
の各関数を使用して、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 T
を T2
と水平に連結して変数を追加します。
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 つの変数 Systolic
と Diastolic
を水平連結して血圧に関する新しい変数を作成します。これを 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 へのインデックス付けには行列へのインデックス付けと同じ構文を使用できます。
BloodPressure
を BMI
の横に移動します。
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 つの変数にグループ化することができます。Systolic
と Diastolic
を組み合わせて 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
参考
table
| addvars
| movevars
| removevars
| splitvars
| mergevars
| inner2outer
| rows2vars