このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
table 内のデータへのアクセス
table は、列方向のデータを変数に格納するコンテナーです。table 変数は、すべての変数の行数が同じであれば、データ型とサイズはそれぞれ異なっていてもかまいません。構造体のフィールドに名前があるのと同様に、table 変数にも名前があります。table の行は名前をもつことができますが、行名は必須ではありません。table データへのアクセスまたは変更を行うには、名前または数値インデックスを使用して、行と変数にインデックスを付けます。
table にインデックスを付ける一般的な理由には以下が含まれます。
行や変数の並べ替えまたは削除。
配列を新しい行または変数として追加。
関数への入力引数として使用するために、データの配列を抽出。
table データへのアクセスまたは変更を行うもう 1 つの方法は、変数エディターでデータを開いてグラフィカルな編集を行うことです。table を開くには、ワークスペース ブラウザーで table をダブルクリックするか、関数 openvar
を使用します。
table インデックス構文の概要
使用するインデックスのタイプに応じて、table から抽出されたサブテーブルまたは配列のいずれかにアクセスできます。次を使ってインデックスを付けます。
小かっこ () は選択した行と変数をもつ table を返します。
ドット表記は変数の内容を配列として返します。
中かっこ {} は選択した行と変数の内容を連結した配列を返します。
行と変数は、名前、数値インデックス、またはデータ型によって指定できます。
"R2019b 以降"、変数名と行名には、スペースや非 ASCII 文字など任意の文字を含めることができます。また、英字だけでなく任意の文字で始めることができます。変数名と行名は、有効な MATLAB® 識別子 (関数
isvarname
で判定) である必要はありません。"R2022a 以降"、行および変数を名前で指定する場合は、
pattern
オブジェクトを使用して名前を指定できます。たとえば、"Var" + digitsPattern
はVar
で始まり、任意の桁数で終わるすべての名前と一致します。
出力のタイプ | 構文 | 行 | 変数 | 例 |
---|---|---|---|---|
指定した行と変数を含む table |
| 指定値:
| 指定値:
|
|
指定したデータ型をもつ変数を含む table |
| 指定値:
|
|
|
1 つの変数からデータを抽出する配列 |
| 指定なし | 指定値:
|
|
1 つの変数と指定した行からデータを抽出する配列 |
| 配列の数値インデックスまたは論理インデックスとして指定 | 指定値:
|
|
指定した行と変数からのデータを連結した配列 |
| 指定値:
| 指定値:
|
|
指定した行と、指定したデータ型をもつ変数からのデータを連結した配列 |
| 指定値:
|
|
|
すべての行と変数からのデータを連結した配列 |
| 指定なし | 指定なし |
|
指定した行と変数による 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 を作成し、それに Age
、Height
、Weight
、Smoker
、SelfAssessedHealthStatus
の各ワークスペース変数を入力します。LastName
の一意の識別子を行名として使用します。T
は 100 行と 5 つの変数をもつ 100 行 5 列の table です。(行名のベクトルを指定する場合、それは table 変数としてカウントされません)。また、SelfAssessedHealthStatus
には一意の値 Excellent
、Good
、Fair
、Poor
のみが含まれるため、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
数値インデックスに加え、行名や変数名を小かっこ内で使用することができます (この場合、行インデックスとコロンを使用する方が行名や変数名を使用するよりもコンパクトです)。
名前によるインデックス付け
姓が Griffin
、Diaz
、および 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 Status
は categorical
変数であるため、これらは除外されます。
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")
論理条件を満たす行へのインデックス付け
論理インデックスの配列を使用して、配列や 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 内の位置によって変数を指定するには、数値を使用します。Age
は T
の最初の変数であるため、その位置を指定するには数値 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 19-Feb-2023 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 行を選択し、変数名を使用して変数 Height
と Weight
を選択します。
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
⋮
参考
table
| histogram
| addvars
| vartype
| renamevars