ドキュメンテーション

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

テーブルの作成と操作

この例では、ワークスペース変数からの table の作成、table データの操作、および後で使用するために table をファイルに書き込む方法について説明します。table は、異種混合データやメタデータ プロパティ (変数名、行名、説明、変数の単位など) を 1 つのコンテナーにまとめるためのデータ型です。

テーブルは、テキスト ファイルまたはスプレッドシートに列として格納されることが多い列方向のデータや表形式のデータに適しています。テーブル内の各変数は、データ型が異なってもかまいませんが、行数は同じでなければなりません。ただし、テーブル内の変数は列ベクトルに制限されません。たとえば、テーブル変数には、行数が他のテーブル変数と同じであるかぎり、複数列の行列を含めることができます。テーブルは、通常、行がそれぞれの観測値を表し、列がそれぞれの測定変数を表す実験データを格納するために使用されます。

テーブルは、関連するデータ変数を収集して整理したり、データを表示および要約したりする場合に便利なコンテナーです。たとえば、変数を抽出して計算を実行し、その結果を新しいテーブル変数に追加するという便利な使い方ができます。計算が終了したら、テーブルをファイルに書き込んで、結果を保存します。

テーブルの作成と表示

ワークスペース変数からテーブルを作成し、それを表示します。あるいは、インポート ツールまたは関数readtableを使用して、スプレッドシートまたはテキスト ファイルから table を作成します。これらの関数を使用してファイルからデータをインポートすると、各列がテーブル変数になります。

100 人の患者のサンプル データを patients MAT ファイルからワークスペース変数に読み込みます。

load patients
whos
  Name                            Size            Bytes  Class      Attributes

  Age                           100x1               800  double               
  Diastolic                     100x1               800  double               
  Gender                        100x1             12212  cell                 
  Height                        100x1               800  double               
  LastName                      100x1             12416  cell                 
  Location                      100x1             15008  cell                 
  SelfAssessedHealthStatus      100x1             12340  cell                 
  Smoker                        100x1               100  logical              
  Systolic                      100x1               800  double               
  Weight                        100x1               800  double               

患者データを含む列方向の変数をテーブルに入力します。テーブル変数には名前でアクセスできます。また、テーブル変数を名前で代入することができます。ワークスペース変数からテーブル変数を代入する場合は、そのテーブル変数に別の名前を割り当てることができます。

table を作成し、それに GenderSmokerHeightWeight の各ワークスペース変数を入力します。最初の 5 行を表示します。

T = table(Gender,Smoker,Height,Weight);
T(1:5,:)
ans=5×4 table
     Gender     Smoker    Height    Weight
    ________    ______    ______    ______

    'Male'      true        71       176  
    'Male'      false       69       163  
    'Female'    false       64       131  
    'Female'    false       67       133  
    'Female'    false       64       119  

代替方法として、関数 readtable を使用して、コンマ区切りファイルから患者データを読み取ることができます。readtable は、ファイル内に存在するすべての列を読み取ります。

ファイル patients.dat からすべての列を読み取ることで、table を作成します。

T2 = readtable('patients.dat');
T2(1:5,:)
ans=5×10 table
     LastName      Gender     Age             Location              Height    Weight    Smoker    Systolic    Diastolic    SelfAssessedHealthStatus
    __________    ________    ___    ___________________________    ______    ______    ______    ________    _________    ________________________

    'Smith'       'Male'      38     'County General Hospital'        71       176        1         124          93              'Excellent'       
    'Johnson'     'Male'      43     'VA Hospital'                    69       163        0         109          77              'Fair'            
    'Williams'    'Female'    38     'St. Mary's Medical Center'      64       131        0         125          83              'Good'            
    'Jones'       'Female'    40     'VA Hospital'                    67       133        0         117          75              'Fair'            
    'Brown'       'Female'    49     'County General Hospital'        64       119        0         122          80              'Good'            

ドット表記 T.varname を使用すると、さらに列方向の table 変数を割り当てることができます。ここで、T は table で、varname は希望する変数名です。乱数である識別子を作成します。その後、それらを table 変数に代入し、table 変数に ID という名前を付けます。テーブルに割り当てる変数はすべて、行数が同じでなければなりません。T の最初の 5 行を表示します。

T.ID = randi(1e4,100,1);
T(1:5,:)
ans=5×5 table
     Gender     Smoker    Height    Weight     ID 
    ________    ______    ______    ______    ____

    'Male'      true        71       176      8148
    'Male'      false       69       163      9058
    'Female'    false       64       131      1270
    'Female'    false       67       133      9134
    'Female'    false       64       119      6324

テーブルに割り当てる変数はすべて、行数が同じでなければなりません。

関数 summary を使用して table 一覧を作成することで、各変数のデータ型、説明、単位およびその他の記述統計を表示します。

summary(T)
Variables:

    Gender: 100x1 cell array of character vectors

    Smoker: 100x1 logical

        Values:

            True        34   
            False       66   

    Height: 100x1 double

        Values:

            Min          60   
            Median       67   
            Max          72   

    Weight: 100x1 double

        Values:

            Min          111  
            Median     142.5  
            Max          202  

    ID: 100x1 double

        Values:

            Min          120
            Median    5485.5
            Max         9706

テーブルのサイズを返します。

size(T)
ans = 1×2

   100     5

T には 100 行と 5 個の変数が含まれています。

T の最初の 5 行を含む、より小さい table を新たに作成し、それを表示します。小かっこ内の数値インデックスを使用して、行と変数を指定できます。この方法は、サブ配列を作成するために数値配列へのインデックス付けと同様です。Tnew は 5 行 5 列の table です。

Tnew = T(1:5,:)
Tnew=5×5 table
     Gender     Smoker    Height    Weight     ID 
    ________    ______    ______    ______    ____

    'Male'      true        71       176      8148
    'Male'      false       69       163      9058
    'Female'    false       64       131      1270
    'Female'    false       67       133      9134
    'Female'    false       64       119      6324

Tnew のすべての行と、2 番目から最後までの変数を含む、より小さい table を作成します。キーワード end を使用して、table の最後の変数または最後の行を示します。Tnew は 5 行 4 列の table です。

Tnew = Tnew(:,2:end)
Tnew=5×4 table
    Smoker    Height    Weight     ID 
    ______    ______    ______    ____

    true        71       176      8148
    false       69       163      9058
    false       64       131      1270
    false       67       133      9134
    false       64       119      6324

行名および変数名によるデータへのアクセス

数値インデックスの代わりに、行名と変数名を使用して、T に行名を追加し、table にインデックスを追加します。ワークスペース変数 LastNameTRowNames プロパティに代入して、行名を追加します。

T.Properties.RowNames = LastName;

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

T(1:5,:)
ans=5×5 table
                 Gender     Smoker    Height    Weight     ID 
                ________    ______    ______    ______    ____

    Smith       'Male'      true        71       176      8148
    Johnson     'Male'      false       69       163      9058
    Williams    'Female'    false       64       131      1270
    Jones       'Female'    false       67       133      9134
    Brown       'Female'    false       64       119      6324

T のサイズを返します。テーブルのサイズの計算時には行名と変数名は含まれないため、テーブル サイズは変わりません。

size(T)
ans = 1×2

   100     5

姓が 'Smith' および 'Johnson' である患者に関するすべてのデータを選択します。この場合、行名を使用する方が数値インデックスを使用するよりも簡単です。Tnew は、2 行 5 列の table です。

Tnew = T({'Smith','Johnson'},:)
Tnew=2×5 table
               Gender    Smoker    Height    Weight     ID 
               ______    ______    ______    ______    ____

    Smith      'Male'    true        71       176      8148
    Johnson    'Male'    false       69       163      9058

変数名でインデックス付けして、'Johnson' という名前の患者の身長と体重を選択します。Tnew は 1 行 2 列の table です。

Tnew = T('Johnson',{'Height','Weight'})
Tnew=1×2 table
               Height    Weight
               ______    ______

    Johnson      69       163  

table 変数には、T.Height のようなドット構文または T(:,'Height') のような名前付きインデックスのいずれかによってアクセスできます。

計算して結果をテーブル変数として追加

table 変数の内容にアクセスし、MATLAB® 関数を使用して、それらに対して計算を実行できます。ボディマス指数 (BMI) を既存の table 変数内のデータに基づいて計算し、それを新しい変数として追加します。BMI と、喫煙者または非喫煙者を示す患者のステータスとの関係をプロットします。血圧測定値をテーブルに追加し、血圧と BMI の関係をプロットします。

table 変数 WeightHeight を使用して、BMI を計算します。計算用に WeightHeight を抽出する一方で、WeightHeight および BMI を患者の他のデータとともに table 内に保持できるので便利です。T の最初の 5 行を表示します。

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

T(1:5,:)
ans=5×6 table
                 Gender     Smoker    Height    Weight     ID      BMI  
                ________    ______    ______    ______    ____    ______

    Smith       'Male'      true        71       176      8148    24.547
    Johnson     'Male'      false       69       163      9058    24.071
    Williams    'Female'    false       64       131      1270    22.486
    Jones       'Female'    false       67       133      9134    20.831
    Brown       'Female'    false       64       119      6324    20.426

BMI の変数の単位と説明の各プロパティを入力します。メタデータは、変数に含まれるデータを詳しく説明するために任意のテーブル変数に追加できます。

T.Properties.VariableUnits{'BMI'} = 'kg/m^2';
T.Properties.VariableDescriptions{'BMI'} = 'Body Mass Index';

ヒストグラムを作成して、この患者グループで喫煙とボディマス指数に関係があるかどうかを調べます。行ごとに同じ患者の BMI 値と Smoker 値が含まれるため、Smoker table 変数から取得した論理値を使用して BMI にインデックスを付けることができます。

tf = (T.Smoker == false);
h1 = histogram(T.BMI(tf),'BinMethod','integers');
hold on
tf = (T.Smoker == true);
h2 = histogram(T.BMI(tf),'BinMethod','integers');
xlabel('BMI (kg/m^2)');
ylabel('Number of Patients');
legend('Nonsmokers','Smokers');
title('BMI Distributions for Smokers and Nonsmokers');
hold off

ワークスペース変数 SystolicDiastolic から、患者の血圧測定値を追加します。行ごとに同じ患者の SystolicDiastolic および BMI の各値が含まれます。

T.Systolic = Systolic;
T.Diastolic = Diastolic;

ヒストグラムを作成して、DiastolicBMI の高い値の間に関係があるかどうかを示します。

tf = (T.BMI <= 25);
h1 = histogram(T.Diastolic(tf),'BinMethod','integers');
hold on
tf = (T.BMI > 25);
h2 = histogram(T.Diastolic(tf),'BinMethod','integers');
xlabel('Diastolic Reading (mm Hg)');
ylabel('Number of Patients');
legend('BMI <= 25','BMI > 25');
title('Diastolic Readings for Low and High BMI');
hold off

出力のためのテーブル変数と行の並べ替え

出力用にテーブルを準備するため、テーブル行を名前で、テーブル変数を位置または名前で並べ替えます。テーブルの最終的な並び順を表示します。

患者がアルファベット順で一覧されるように、行名でテーブルを並べ替えます。

T = sortrows(T,'RowNames');

T(1:5,:)
ans=5×8 table
                  Gender     Smoker    Height    Weight     ID      BMI      Systolic    Diastolic
                 ________    ______    ______    ______    ____    ______    ________    _________

    Adams        'Female'    false       66       137      8235    22.112      127          83    
    Alexander    'Male'      true        69       171      1300    25.252      128          99    
    Allen        'Female'    false       63       143      7432    25.331      113          80    
    Anderson     'Female'    false       68       128      1577    19.462      114          77    
    Bailey       'Female'    false       68       130      2239    19.766      113          81    

変数 BloodPressure を作成し、100 行 2 列の table 変数で血圧測定値を格納します。

T.BloodPressure = [T.Systolic T.Diastolic];

SystolicDiastolic は冗長なため、table から削除します。

T.Systolic = [];
T.Diastolic = [];

T(1:5,:)
ans=5×7 table
                  Gender     Smoker    Height    Weight     ID      BMI      BloodPressure
                 ________    ______    ______    ______    ____    ______    _____________

    Adams        'Female'    false       66       137      8235    22.112     127     83  
    Alexander    'Male'      true        69       171      1300    25.252     128     99  
    Allen        'Female'    false       63       143      7432    25.331     113     80  
    Anderson     'Female'    false       68       128      1577    19.462     114     77  
    Bailey       'Female'    false       68       130      2239    19.766     113     81  

ID を第 1 列にするため、table 変数を位置で並べ替えます。

T = T(:,[5 1:4 6 7]);

T(1:5,:)
ans=5×7 table
                  ID      Gender     Smoker    Height    Weight     BMI      BloodPressure
                 ____    ________    ______    ______    ______    ______    _____________

    Adams        8235    'Female'    false       66       137      22.112     127     83  
    Alexander    1300    'Male'      true        69       171      25.252     128     99  
    Allen        7432    'Female'    false       63       143      25.331     113     80  
    Anderson     1577    'Female'    false       68       128      19.462     114     77  
    Bailey       2239    'Female'    false       68       130      19.766     113     81  

テーブル変数を名前で並べ替えることもできます。Gender が最後になるように table 変数を並べ替えるには、次のようにします。

  1. table の VariableNames プロパティで 'Gender' を検索します。

  2. 'Gender' を、変数名の cell 配列の最後に移動します。

  3. 名前の cell 配列を使用してテーブル変数を並べ替えます。

varnames = T.Properties.VariableNames;
others = ~strcmp('Gender',varnames);
varnames = [varnames(others) 'Gender'];
T = T(:,varnames);

並べ替えられたテーブルの最初の 5 行を表示します。

T(1:5,:)
ans=5×7 table
                  ID     Smoker    Height    Weight     BMI      BloodPressure     Gender 
                 ____    ______    ______    ______    ______    _____________    ________

    Adams        8235    false       66       137      22.112     127     83      'Female'
    Alexander    1300    true        69       171      25.252     128     99      'Male'  
    Allen        7432    false       63       143      25.331     113     80      'Female'
    Anderson     1577    false       68       128      19.462     114     77      'Female'
    Bailey       2239    false       68       130      19.766     113     81      'Female'

ファイルへのテーブルの書き込み

テーブル全体をファイルに書き込むこともできれば、サブテーブルを作成して元のテーブルの選択した部分を別のファイルに書き込むこともできます。

関数 writetable を使用して、T をファイルに書き込みます。

writetable(T,'allPatientsBMI.txt');

関数 readtable を使用して、allPatientsBMI.txt のデータを新しい table に読み取ることができます。

サブテーブルを作成し、サブテーブルを別のファイルに書き込みます。喫煙者である患者のデータを含む行を削除します。次に、変数 Smoker を削除します。nonsmokers には、非喫煙者である患者のデータのみが含まれます。

nonsmokers = T;
toDelete = (nonsmokers.Smoker == true);
nonsmokers(toDelete,:) = [];
nonsmokers.Smoker = [];

nonsmokers をファイルに書き込みます。

writetable(nonsmokers,'nonsmokersBMI.txt');

参考

| | | | | | | |

関連する例

詳細