Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

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

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

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

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

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

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

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

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

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

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

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

行と変数は、名前、数値インデックス、またはデータ型によって指定できます。

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

  • "R2022a 以降"、行および変数を名前で指定する場合は、pattern オブジェクトを使用して名前を指定できます。たとえば、"Var" + digitsPatternVar で始まり、任意の桁数で終わるすべての名前と一致します。

出力のタイプ

構文

変数

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

T(rows,vars)

指定値:

  • 行番号 (1m)

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

  • 時間 (T が timetable の場合)

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

指定値:

  • 変数番号 (1n)

  • 名前

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

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

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

  • T(:,["A","B"])

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

  • T(:,"A" + wildcardPattern)

    すべての行と、A で始まる名前の変数をもつ 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"]}

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

  • T{:,"A" + wildcardPattern}

    すべての行と、A で始まる名前の変数を連結した配列

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

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             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               

table を作成し、それに AgeHeightWeightSmokerSelfAssessedHealthStatus の各ワークスペース変数を入力します。LastName の一意の識別子を行名として使用します。T は 100 行と 5 つの変数をもつ 100 行 5 列の table です。(行名のベクトルを指定する場合、それは table 変数としてカウントされません)。また、SelfAssessedHealthStatus には一意の値 ExcellentGoodFairPoor のみが含まれるため、categorical 変数に変換します。変数にカテゴリとみなすことができる固定した値のセットがある場合、変数を categorical 配列として扱うと便利です。

SelfAssessedHealthStatus = categorical(SelfAssessedHealthStatus);
T = table(Age,Height,Weight,Smoker,SelfAssessedHealthStatus,...
    'RowNames',LastName)
T=100×5 table
                Age    Height    Weight    Smoker    SelfAssessedHealthStatus
                ___    ______    ______    ______    ________________________

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

数値インデックスまたは end キーワードを使用したインデックス付け

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

firstRows = T(1:5,:)
firstRows=5×5 table
                Age    Height    Weight    Smoker    SelfAssessedHealthStatus
                ___    ______    ______    ______    ________________________

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

最後の行または変数を意味する end キーワードも使用できます。end キーワードを使用して table の最後の 5 行にインデックスを付けます。

lastRows = T(end-4:end,:)
lastRows=5×5 table
                 Age    Height    Weight    Smoker    SelfAssessedHealthStatus
                 ___    ______    ______    ______    ________________________

    Alexander    25       69       171      true                Good          
    Russell      44       69       188      true                Good          
    Griffin      49       70       186      false               Fair          
    Diaz         45       68       172      true                Good          
    Hayes        48       66       177      false               Fair          

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

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

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

rowsByName = T(["Griffin","Diaz","Hayes"],:)
rowsByName=3×5 table
               Age    Height    Weight    Smoker    SelfAssessedHealthStatus
               ___    ______    ______    ______    ________________________

    Griffin    49       70       186      false               Fair          
    Diaz       45       68       172      true                Good          
    Hayes      48       66       177      false               Fair          

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

variablesByName = T(1:5,["Height","Weight"])
variablesByName=5×2 table
                Height    Weight
                ______    ______

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

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

たとえば、関数 renamevars を使用して変数 SelfAssessedHealthStatus の名前を変更します。スペースとダッシュを追加して、その変数名を読みやすくします。次に、変数名を使用して T にインデックスを付けます。

T = renamevars(T,"SelfAssessedHealthStatus","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 行または変数名を指定する場合、テキストを照合するためのルールを定義する "パターン" を使用できます。たとえば、"Var" で始まり、任意の桁数が続く変数名を照合できます。patternオブジェクト、string、演算子を使用して "パターン表現" を作成できます。

たとえば、行名で T にインデックス付けし、患者の姓が文字 G で始まるすべての行を検索します。G の後に続く任意の文字を照合するには、関数wildcardPatternを使用します。

beginsWithG = "G" + wildcardPattern
beginsWithG = pattern
  Matching:

    "G" + wildcardPattern

T(beginsWithG,:)
ans=6×5 table
                Age    Height    Weight    Smoker    Self-Assessed Health Status
                ___    ______    ______    ______    ___________________________

    Garcia      27       69       131      true               Fair              
    Green       44       71       193      false              Good              
    Gonzalez    35       66       118      false              Fair              
    Gray        31       64       130      false              Excellent         
    Gonzales    48       71       174      false              Good              
    Griffin     49       70       186      false              Fair              

変数名で T にインデックス付けし、名前の一部に Status が含まれる任意の名前を検索します。

containsStatus = wildcardPattern + "Status" + wildcardPattern;
T(1:5,containsStatus)
ans=5×1 table
                Self-Assessed Health Status
                ___________________________

    Smith                Excellent         
    Johnson              Fair              
    Williams             Good              
    Jones                Fair              
    Brown                Good              

変数のデータ型によるインデックス付け

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

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

subscriptObject = vartype("numeric")
subscriptObject = 
	table vartype subscript:

		Select table variables matching the type 'numeric'

	See Access Data in a Table.

T からの数値変数のみをもつ table を作成します。変数 Smoker は logical 変数であり、Self-Assessed Health Statuscategorical 変数であるため、これらは除外されます。

onlyNumericVariables = T(:,subscriptObject)
onlyNumericVariables=100×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  
    Davis       46       68       142  
    Miller      33       64       142  
    Wilson      40       68       180  
    Moore       28       68       183  
    Taylor      31       66       132  
    Anderson    45       68       128  
    Thomas      42       66       137  
    Jackson     25       71       174  
    White       39       72       202  
    Harris      36       65       129  
    Martin      48       71       181  
      ⋮

値が論理条件を満たす行の検索

patients MAT ファイルのデータから、別の小さい table を作成します。

load patients.mat
T = table(Age,Height,Weight,Smoker);

値が論理条件を満たす table の行を検索するには、論理インデックス付けを使用します。まず、ドット表記を使用して table 変数にアクセスします。次に、変数の値が指定した条件を満たす論理インデックスの配列を作成できます。論理インデックスを使用して table にインデックスを付けます。

ドット表記を使用した table 変数からのデータ抽出

table 変数からデータを抽出するには、ドット表記を使用します。

たとえば、table 変数 Weight から数値のヒストグラムをプロットします。ドット表記を使用して、T.Weight を数値配列として処理できます。T.Weight は、100 行を含む倍精度の列ベクトルです。

histogram(T.Weight)
title("Patient Weights")

Figure contains an axes object. The axes object with title Patient Weights contains an object of type histogram.

論理条件を満たす行へのインデックス付け

論理インデックスの配列を使用して、配列や 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×4 table
    Age    Height    Weight    Smoker
    ___    ______    ______    ______

    38       71       176      true  
    38       64       131      false 
    33       64       142      true  
    28       68       183      false 
    31       66       132      false 
    25       71       174      false 
    39       72       202      true  
    36       65       129      false 
    32       69       191      true  
    27       69       131      true  
    37       70       179      false 
    39       64       117      false 
    28       65       123      true  
    25       70       189      false 
    39       63       143      false 
    25       63       114      false 
      ⋮

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

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

    38       71       176      true  
    33       64       142      true  
    39       72       202      true  
    32       69       191      true  
    27       69       131      true  
    28       65       123      true  
    30       67       186      true  
    33       66       180      true  
    39       71       164      true  
    37       70       194      true  
    33       67       115      true  
    31       72       178      true  
    28       69       189      true  
    39       68       182      true  
    37       65       120      true  
    31       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,Height,Weight,Smoker);

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 に追加します。

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

    38       71       176      true               Excellent         
    43       69       163      false              Fair              
    38       64       131      false              Good              
    40       67       133      false              Fair              
    49       64       119      false              Good              

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

healthStatus = T.("Self-Assessed Health Status");
healthStatus(1:5)
ans = 5x1 categorical
     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×5 table
    Age    Height    Weight    Smoker    12-Feb-2022 Self Report
    ___    ______    ______    ______    _______________________

    38       71       176      true             Excellent       
    43       69       163      false            Fair            
    38       64       131      false            Good            
    40       67       133      false            Fair            
    49       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{:,:} と等価です。ここで、コロンはすべての行とすべての変数を示します。table に行名が含まれる場合、それらは T.Variables の出力には含まれません。行名は table 変数に保存されません。行名は、table を記述するメタデータの一部です。

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
      ⋮

参考

| | | |

関連するトピック