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

table 内のデータへのアクセス

table は、列方向のデータを変数に格納するコンテナーです。table 変数は、すべての変数の行数が同じであれば、データ型とサイズはそれぞれ異なっていてもかまいません。構造体のフィールドに名前があるのと同様に、table 変数にも名前があります。table の行は名前をもつことができますが、行名は必須ではありません。table データにアクセスするには、名前または数値インデックスを使用して、行と変数にインデックスを付けます。

table にインデックスを付ける一般的な理由には以下が含まれます。

  • 行や変数の並べ替えまたは削除。

  • 配列を新しい行または変数として追加。

  • 関数への入力引数として使用するために、データの配列を抽出。

table インデックス構文の概要

使用するインデックスのタイプに応じて、table から抽出されたサブテーブルまたは配列のいずれかにアクセスできます。次を使ってインデックスを付けます。

  • 小かっこ () は選択した行と変数をもつ table を返します。

  • ドット表記は変数の内容を配列として返します。

  • 中かっこ {} は選択した行と変数の内容を連結した配列を返します。

行と変数は、名前、数値インデックス、またはデータ型によって指定できます。R2019b 以降、変数名と行名には、スペースや非 ASCII 文字など任意の文字を含めることができます。また、英字だけでなく任意の文字で始めることができます。変数名と行名は、有効な MATLAB® 識別子 (関数 isvarname で判定) である必要はありません。

出力のタイプ

構文

変数

指定した行と変数を含む table

T(rows,vars)

指定値:

  • 行番号 (1m)

  • 名前 (T に行名がある場合)

  • 時間 (T が timetable の場合)

  • コロン (:) (すべての行を意味)

指定値:

  • 変数番号 (1n)

  • 名前

  • コロン (:) (すべての変数を意味)

  • T(1:5,[1 4 5])

    T の最初の 5 行と、1 番目、4 番目、5 番目の変数をもつ table

  • T(:,{'A','B'})

    T のすべての行と、'A' および 'B' という名前の変数をもつ table

指定したデータ型をもつ変数を含む table

S = vartype(type);

T(rows,S)

指定値:

  • 行番号 (1m)

  • 名前 (T に行名がある場合)

  • 時間 (T が timetable の場合)

  • コロン (:) (すべての行を意味)

'numeric''categorical''datetime' などのデータ型として指定

  • S = vartype('numeric');

    T(1:5,S)

    T の最初の 5 行と数値変数をもつ table

1 つの変数からデータを抽出する配列

T.var

T.(expression)

指定なし

指定値:

  • 変数名 (引用符なし)

  • かっこで囲まれた、変数名または数値を返す式

  • T.Date

    'Date' という名前の table 変数から抽出された配列

  • T.('2019/06/30')

    '2019/06/30' という名前の table 変数から抽出された配列

  • T.(1)

    最初の table 変数から抽出された配列

1 つの変数と指定した行からデータを抽出する配列

T.var(rows)

T.(expression)(rows)

配列の数値インデックスまたは論理インデックスとして指定

指定値:

  • 変数名 (引用符なし)

  • かっこで囲まれた、変数名または数値を返す式

  • T.Date(1:5)

    'Date' という名前の table 変数から抽出された配列の最初の 5 行

  • T.('2019/06/30')(1:5)

    '2019/06/30' という名前の table 変数から抽出された配列の最初の 5 行

  • T.(1)(1:5)

    最初の table 変数から抽出された配列の最初の 5 行

指定した行と変数からのデータを連結した配列

T{rows,vars}

指定値:

  • 行番号 (1m)

  • 名前 (T に行名がある場合)

  • 時間 (T が timetable の場合)

  • コロン (:) (すべての行を意味)

指定値:

  • 変数番号 (1n)

  • 名前

  • コロン (:) (すべての変数を意味)

  • T{1:5,[1 4 5]}

    T の最初の 5 行と 1 番目、4 番目、5 番目の変数を連結した配列

  • T{:,{'A','B'}}

    T のすべての行と、'A' および 'B' という名前の変数を連結した配列

指定した行と、指定したデータ型をもつ変数からのデータを連結した配列

S = vartype(type);

T{rows,S}

指定値:

  • 行番号 (1m)

  • 名前 (T に行名がある場合)

  • 時間 (T が timetable の場合)

  • コロン (:) (すべての行を意味)

'numeric''categorical''datetime' などのデータ型として指定

  • S = vartype('numeric');

    T{1:5,S}

    T の最初の 5 行と数値変数を連結した配列

すべての行と変数からのデータを連結した配列

T.Variables

指定なし

指定なし

  • T.Variables

    T{:,:} で返される配列と同一

指定した行と変数を含む 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 を作成し、それに AgeGenderHeightWeightSmoker の各ワークスペース変数を入力します。LastName の一意の識別子を行名として使用します。T は 100 行 5 列の table です (行名を指定する場合、それらは table 変数としてカウントされません)。

T = table(Age,Gender,Height,Weight,Smoker,...
    'RowNames',LastName)
T=100×5 table
                Age      Gender      Height    Weight    Smoker
                ___    __________    ______    ______    ______

    Smith       38     {'Male'  }      71       176      true  
    Johnson     43     {'Male'  }      69       163      false 
    Williams    38     {'Female'}      64       131      false 
    Jones       40     {'Female'}      67       133      false 
    Brown       49     {'Female'}      64       119      false 
    Davis       46     {'Female'}      68       142      false 
    Miller      33     {'Female'}      64       142      true  
    Wilson      40     {'Male'  }      68       180      false 
    Moore       28     {'Male'  }      68       183      false 
    Taylor      31     {'Female'}      66       132      false 
    Anderson    45     {'Female'}      68       128      false 
    Thomas      42     {'Female'}      66       137      false 
    Jackson     25     {'Male'  }      71       174      false 
    White       39     {'Male'  }      72       202      true  
    Harris      36     {'Female'}      65       129      false 
    Martin      48     {'Male'  }      71       181      true  
      ⋮

数値インデックスによるインデックス付け

T の最初の 5 行とすべての変数を含むサブテーブルを作成します。必要な行と変数を指定するには、小かっこで囲んだ数値インデックスを使用します。このタイプのインデックスは、数値配列へのインデックスと似ています。

T1 = T(1:5,:)
T1=5×5 table
                Age      Gender      Height    Weight    Smoker
                ___    __________    ______    ______    ______

    Smith       38     {'Male'  }      71       176      true  
    Johnson     43     {'Male'  }      69       163      false 
    Williams    38     {'Female'}      64       131      false 
    Jones       40     {'Female'}      67       133      false 
    Brown       49     {'Female'}      64       119      false 

T1 は、5 行 5 列の table です。

数値インデックスに加え、行名や変数名を小かっこ内で使用することができます (この場合、行インデックスとコロンを使用する方が行名や変数名を使用するよりもコンパクトです)。

名前によるインデックス付け

姓が 'Williams' および 'Brown' である患者に関するすべてのデータを選択します。T には患者の姓を示す行名があるため、行名を使用して T にインデックスを付けます。

T2 = T({'Williams','Brown'},:)
T2=2×5 table
                Age      Gender      Height    Weight    Smoker
                ___    __________    ______    ______    ______

    Williams    38     {'Female'}      64       131      false 
    Brown       49     {'Female'}      64       119      false 

T2 は、2 行 5 列の table です。

変数を名前で選択することもできます。T の最初の 5 行と、変数 Height および Weight のみをもつ table を作成します。これを表示します。

T3 = T(1:5,{'Height','Weight'})
T3=5×2 table
                Height    Weight
                ______    ______

    Smith         71       176  
    Johnson       69       163  
    Williams      64       131  
    Jones         67       133  
    Brown         64       119  

table 変数の名前は、有効な MATLAB 識別子である必要はありません。スペースや非 ASCII 文字を含めることができ、任意の文字で開始できます。

スペースとダッシュを含む変数名を T に追加します。次に、変数名を使用して T にインデックスを付けます。

T = addvars(T,SelfAssessedHealthStatus,'NewVariableNames','Self-Assessed Health Status');
T(1:5,{'Age','Smoker','Self-Assessed Health Status'})
ans=5×3 table
                Age    Smoker    Self-Assessed Health Status
                ___    ______    ___________________________

    Smith       38     true             {'Excellent'}       
    Johnson     43     false            {'Fair'     }       
    Williams    38     false            {'Good'     }       
    Jones       40     false            {'Fair'     }       
    Brown       49     false            {'Good'     }       

データ型の添字の指定

名前や数値を使用して変数を指定する代わりに、同じデータ型をもつすべての変数で一致するデータ型添字を作成することができます。

まず、数値の table 変数に対応するデータ型添字を作成します。

S = vartype('numeric')
S = 
	table vartype subscript:

		Select table variables matching the type 'numeric'

	See Access Data in a Table.

T の数値変数と最初の 5 行のみをもつ table を作成します。

T4 = T(1:5,S)
T4=5×3 table
                Age    Height    Weight
                ___    ______    ______

    Smith       38       71       176  
    Johnson     43       69       163  
    Williams    38       64       131  
    Jones       40       67       133  
    Brown       49       64       119  

ドット表記と論理値を使用したデータの抽出

patients MAT ファイルから table を作成します。次に、ドット表記を使用して table 変数からデータを抽出します。また、条件を満たす table 変数の値から生成された論理インデックスを使用してインデックスを付けることもできます。

load patients

T = table(Age,Gender,Height,Weight,Smoker,...
    'RowNames',LastName);

変数からのデータの抽出

1 つの変数からデータを抽出するには、ドット表記を使用します。変数 Weight から数値を抽出します。次に、これらの値のヒストグラムをプロットします。

histogram(T.Weight)
title('Patient Weight')

T.Weight は、100 行を含む倍精度の列ベクトルです。

論理インデックスによる行の選択

論理インデックスの配列を使用して、配列や table にインデックスを付けることができます。通常は、table 変数のどの値が条件を満たすかを判定する論理式を使用します。式の結果は、論理インデックスの配列になります。

たとえば、年齢が 40 歳未満の患者に対応する論理インデックスを作成します。

rows = T.Age < 40
rows = 100x1 logical array

   1
   0
   1
   0
   0
   0
   1
   0
   1
   1
      ⋮

年齢が 40 歳未満の患者の身長を抽出するには、rows を使用して変数 Height にインデックスを付けます。40 歳未満の患者は 56 人います。

T.Height(rows)
ans = 56×1

    71
    64
    64
    68
    66
    71
    72
    65
    69
    69
      ⋮

論理インデックスを使用して table にインデックスを付けることができます。40 歳未満の患者について T の行を表示します。

T(rows,:)
ans=56×5 table
                 Age      Gender      Height    Weight    Smoker
                 ___    __________    ______    ______    ______

    Smith        38     {'Male'  }      71       176      true  
    Williams     38     {'Female'}      64       131      false 
    Miller       33     {'Female'}      64       142      true  
    Moore        28     {'Male'  }      68       183      false 
    Taylor       31     {'Female'}      66       132      false 
    Jackson      25     {'Male'  }      71       174      false 
    White        39     {'Male'  }      72       202      true  
    Harris       36     {'Female'}      65       129      false 
    Thompson     32     {'Male'  }      69       191      true  
    Garcia       27     {'Female'}      69       131      true  
    Martinez     37     {'Male'  }      70       179      false 
    Rodriguez    39     {'Female'}      64       117      false 
    Walker       28     {'Female'}      65       123      true  
    Hall         25     {'Male'  }      70       189      false 
    Allen        39     {'Female'}      63       143      false 
    Young        25     {'Female'}      63       114      false 
      ⋮

1 つの論理式を使って複数の条件と照合することができます。40 歳未満の喫煙患者の行を表示します。

rows = (T.Smoker==true & T.Age<40);
T(rows,:)
ans=18×5 table
                 Age      Gender      Height    Weight    Smoker
                 ___    __________    ______    ______    ______

    Smith        38     {'Male'  }      71       176      true  
    Miller       33     {'Female'}      64       142      true  
    White        39     {'Male'  }      72       202      true  
    Thompson     32     {'Male'  }      69       191      true  
    Garcia       27     {'Female'}      69       131      true  
    Walker       28     {'Female'}      65       123      true  
    King         30     {'Male'  }      67       186      true  
    Nelson       33     {'Male'  }      66       180      true  
    Mitchell     39     {'Male'  }      71       164      true  
    Turner       37     {'Male'  }      70       194      true  
    Sanders      33     {'Female'}      67       115      true  
    Price        31     {'Male'  }      72       178      true  
    Jenkins      28     {'Male'  }      69       189      true  
    Long         39     {'Male'  }      68       182      true  
    Patterson    37     {'Female'}      65       120      true  
    Flores       31     {'Female'}      66       141      true  
      ⋮

任意の変数名や式を使用したドット表記

ドット表記を使用してインデックスを付ける場合、変数の指定方法が 2 つあります。

  • 引用符なしの名前で指定。たとえば、T.Date'Date' という名前の変数を指定します。

  • ドットの後の小かっこで囲まれた式で指定。たとえば、T.('Start Date')'Start Date' という名前の変数を指定します。

table 変数名が有効な MATLAB® 識別子でもある場合は、最初の構文を使用します (有効な識別子は英字で始まり、英字、数字、アンダースコアのみを含みます)。

以下を指定する場合は、2 つ目の構文を使用します。

  • table 内の変数の位置を示す数値。

  • 有効な MATLAB 識別子ではない変数名。

  • table 内の変数の名前を出力としてもつ関数、または table に追加された変数。関数の出力は文字ベクトルまたは string スカラーでなければなりません。

たとえば、patients MAT ファイルから table を作成します。次に、ドット表記を使用して table 変数の内容にアクセスします。

load patients

T = table(Age,Gender,Height,Weight,Smoker,...
    'RowNames',LastName);

table 内の位置によって変数を指定するには、数値を使用します。AgeT の最初の変数であるため、その位置を指定するには数値 1 を使用します。

T.(1)
ans = 100×1

    38
    43
    38
    40
    49
    46
    33
    40
    28
    31
      ⋮

変数を名前で指定するには、引用符で名前を囲むことができます。'Age' は有効な識別子であるため、T.Age または T.('Age') を使用して指定できます。

T.('Age')
ans = 100×1

    38
    43
    38
    40
    49
    46
    33
    40
    28
    31
      ⋮

有効な MATLAB 識別子でない table 変数名も指定できます。変数名にはスペースや非 ASCII 文字を含めることができ、任意の文字で開始できます。ただし、こうした名前の table 変数にドット表記を使用してアクセスする場合は、小かっこを使用して名前を指定しなければなりません。

スペースとハイフンを含む変数名を T に追加します。

T = addvars(T,SelfAssessedHealthStatus,'NewVariableNames','Self-Assessed Health Status');
T(1:5,:)
ans=5×6 table
                Age      Gender      Height    Weight    Smoker    Self-Assessed Health Status
                ___    __________    ______    ______    ______    ___________________________

    Smith       38     {'Male'  }      71       176      true             {'Excellent'}       
    Johnson     43     {'Male'  }      69       163      false            {'Fair'     }       
    Williams    38     {'Female'}      64       131      false            {'Good'     }       
    Jones       40     {'Female'}      67       133      false            {'Fair'     }       
    Brown       49     {'Female'}      64       119      false            {'Good'     }       

ドット表記を使用して新しい table 変数にアクセスします。最初の 5 つの要素を表示します。

C = T.('Self-Assessed Health Status');
C(1:5)
ans = 5x1 cell array
    {'Excellent'}
    {'Fair'     }
    {'Good'     }
    {'Fair'     }
    {'Good'     }

また、関数の出力を変数名として使用することもできます。変数 T.('Self-Assessed Health Status') を削除します。そのうえで、今日の日付が名前に含まれる変数に置き換えます。

T.('Self-Assessed Health Status') = [];
T.(string(datetime('today')) + ' Self Report') = SelfAssessedHealthStatus;
T(1:5,:)
ans=5×6 table
                Age      Gender      Height    Weight    Smoker    30-Jul-2019 Self Report
                ___    __________    ______    ______    ______    _______________________

    Smith       38     {'Male'  }      71       176      true           {'Excellent'}     
    Johnson     43     {'Male'  }      69       163      false          {'Fair'     }     
    Williams    38     {'Female'}      64       131      false          {'Good'     }     
    Jones       40     {'Female'}      67       133      false          {'Fair'     }     
    Brown       49     {'Female'}      64       119      false          {'Good'     }     

指定した行と変数からのデータの抽出

中かっこを使用したインデックスではデータが table から抽出され、その結果はサブテーブルでは "なく" 配列になります。しかし、その違いを除けば、小かっこを使用したインデックスの場合と同様に、数値、名前、データ型の添字を使用して行と変数を指定できます。table から値を抽出するには、中かっこを使用します。複数の table 変数から値を抽出する場合、各変数のデータ型は連結可能でなければなりません。

行と変数の指定

patients ファイルの数値配列と logical 配列から table を作成します。

load patients

T = table(Age,Height,Weight,Smoker,...
    'RowNames',LastName);

T の複数の変数からデータを抽出します。ドット表記とは異なり、中かっこによるインデックス付けでは複数の table 変数から値を抽出し、連結して 1 つの配列にすることができます。

最初の 5 名の患者の身長と体重を抽出します。数値インデックスを使用して最初の 5 行を選択し、変数名を使用して変数 HeightWeight を選択します。

A = T{1:5,{'Height','Weight'}}
A = 5×2

    71   176
    69   163
    64   131
    67   133
    64   119

A は 5 行 2 列の数値配列で、table ではありません。

変数名を 1 つ指定した場合、中かっこによるインデックス付けの結果は、ドット表記で得られる配列と同じになります。ただし、中かっこのインデックスを使用する場合は、行と変数の両方を指定しなければなりません。たとえば、構文 T.Height と構文 T{:,'Height'} は同じ配列を返します。

すべての行と変数からのデータの抽出

すべての table 変数のデータ型が互いに連結可能であれば、T.Variables 構文を使用してすべての table データを 1 つの配列に入れることができます。この構文は T{:,:} と等価です。ここで、コロンはすべての行とすべての変数を示します。

A2 = T.Variables
A2 = 100×4

    38    71   176     1
    43    69   163     0
    38    64   131     0
    40    67   133     0
    49    64   119     0
    46    68   142     0
    33    64   142     1
    40    68   180     0
    28    68   183     0
    31    66   132     0
      ⋮

参考

| | |

関連するトピック