혼합된 데이터로 구성된 테이블
단일 컨테이너에 관련 데이터 저장하기
table
데이터형을 사용하여 변수 이름, 행 이름, 설명, 변수 단위와 같은 혼합형 데이터 속성과 메타데이터 속성을 단일 컨테이너에 수집할 수 있습니다. 테이블은 텍스트 파일 또는 스프레드시트에서 주로 열로 저장되는 열 방향 데이터 또는 테이블 형식 데이터에 적합합니다. 예를 들어, 행에 여러 관측값을 나타내고 열에 여러 측정된 변수를 나타내는 방식으로 테이블을 사용하여 실험 데이터를 저장할 수 있습니다.
테이블은 열 방향 변수와 행으로 구성됩니다. 테이블에 포함된 변수는 데이터형과 크기가 서로 다를 수 있지만, 변수의 행 개수는 동일해야 합니다. 또한 변수 내의 데이터는 동종 데이터이므로, 하나의 테이블 변수를 데이터 배열처럼 취급할 수 있습니다.
예를 들어, patients.mat
MAT 파일에서 환자에 대한 표본 데이터를 불러옵니다. 혈압 데이터를 단일 변수로 결합합니다. Poor
, Fair
, Good
, Excellent
의 4개 값을 가지는 범주 변수 SelfAssessedHealthStatus
를 categorical형 배열로 변환합니다. 몇몇 변수에 대한 정보를 확인합니다.
load patients BloodPressure = [Systolic Diastolic]; SelfAssessedHealthStatus = categorical(SelfAssessedHealthStatus); whos("Age","Smoker","BloodPressure","SelfAssessedHealthStatus")
Name Size Bytes Class Attributes Age 100x1 800 double BloodPressure 100x2 1600 double SelfAssessedHealthStatus 100x1 560 categorical Smoker 100x1 100 logical
이제, 이러한 변수에서 테이블을 생성하고 표시합니다. 변수는 행 개수가 100으로 모두 동일하므로 다 함께 하나의 테이블에 저장할 수 있습니다.
T = table(Age,Smoker,BloodPressure,SelfAssessedHealthStatus)
T=100×4 table
Age Smoker BloodPressure SelfAssessedHealthStatus
___ ______ _____________ ________________________
38 true 124 93 Excellent
43 false 109 77 Fair
38 false 125 83 Good
40 false 117 75 Fair
49 false 122 80 Good
46 false 121 70 Good
33 true 130 88 Good
40 false 115 82 Good
28 false 115 78 Excellent
31 false 118 86 Excellent
45 false 114 77 Excellent
42 false 115 68 Poor
25 false 127 74 Poor
39 true 130 95 Excellent
36 false 114 79 Good
48 true 130 92 Good
⋮
테이블의 각 변수는 하나의 데이터형을 가집니다. 새 행을 테이블에 추가하는 경우 MATLAB®은 새 데이터와 이에 대응되는 테이블 변수 사이의 데이터형을 일관되게 유지합니다. 예를 들어, 새 환자에 대해 첫 번째 열에 환자의 연령 대신 건강 상태를 포함하는 정보를 추가하려고 T(end+1,:) = {"Poor",true,[130 84],37}
과 같은 표현식을 사용하면 다음과 같은 오류가 발생합니다.
Right hand side of an assignment to a categorical array must be a categorical or text representing a category name.
오류가 발생하는 이유는 MATLAB®이 categorical형 배열 SelfAssessedHealthStatus
에 숫자형 데이터 37
을 할당할 수 없기 때문입니다.
숫자 인덱싱(Numeric Indexing)이나 이름 인덱싱(Named Indexing)으로 데이터에 액세스하기
괄호, 중괄호 또는 점 표기법을 사용하여 테이블의 요소를 참조할 수 있습니다. 괄호를 사용하여 테이블에서 데이터 서브셋을 선택하고 테이블 컨테이너를 유지할 수 있습니다. 중괄호와 점 표기법을 사용하여 테이블에서 데이터를 추출할 수 있습니다. 각각의 테이블 인덱싱 메서드 내에, 이름이나 숫자 인덱스를 사용하여 액세스할 행 또는 변수를 지정할 수 있습니다.
위의 샘플 테이블을 살펴보겠습니다. 테이블 T
의 각 행은 개별 환자를 나타냅니다. 작업 공간 변수 LastName
에는 100개 행에 대한 고유 식별자가 포함되어 있습니다. RowNames
속성을 LastName
으로 설정하여 행 이름을 테이블에 추가하고, 업데이트된 테이블에서 처음 5개 행을 표시합니다.
T.Properties.RowNames = LastName; T(1:5,:)
ans=5×4 table
Age Smoker BloodPressure SelfAssessedHealthStatus
___ ______ _____________ ________________________
Smith 38 true 124 93 Excellent
Johnson 43 false 109 77 Fair
Williams 38 false 125 83 Good
Jones 40 false 117 75 Fair
Brown 49 false 122 80 Good
행 이름과 변수 이름을 사용하면 데이터에 레이블을 지정하는 것은 물론, 테이블의 데이터에도 액세스할 수 있습니다. 예를 들어, 이름 인덱싱을 사용하여 Williams
라는 환자와 Brown
이라는 환자의 연령과 혈압을 표시합니다.
T(["Williams","Brown"],["Age","BloodPressure"])
ans=2×2 table
Age BloodPressure
___ _____________
Williams 38 125 83
Brown 49 122 80
이제, 숫자 인덱싱을 사용하여 해당하는 하위 테이블을 반환합니다. 첫 번째 변수와 세 번째 변수에서 세 번째 행과 다섯 번째 행을 반환합니다.
T([3 5],[1 3])
ans=2×2 table
Age BloodPressure
___ _____________
Williams 38 125 83
Brown 49 122 80
테이블 인덱싱에 대한 자세한 내용은 테이블의 데이터에 액세스하기 항목을 참조하십시오.
테이블 속성을 사용하여 데이터 설명하기
테이블에는 데이터를 저장하는 것은 물론 변수 이름, 행 이름, 설명, 변수 단위와 같은 메타데이터를 저장할 수 있는 속성이 있습니다. T
.Properties.
PropName
을 사용하여 속성에 액세스할 수 있습니다. 여기서 T
는 테이블의 이름이고 PropName
은 테이블 속성의 이름입니다.
예를 들어, Age
에 대한 테이블 설명, 변수 설명, 변수 단위를 추가해 보겠습니다.
T.Properties.Description = "Simulated Patient Data"; T.Properties.VariableDescriptions = ... ["" ... "true or false" ... "Systolic/Diastolic" ... "Status Reported by Patient"]; T.Properties.VariableUnits("Age") = "Yrs";
VariableDescriptions
내의 빈 문자열은 각각 해당하는 변수에 설명이 없음을 나타냅니다. 자세한 내용은 table
의 속성 섹션을 참조하십시오.
테이블 요약을 출력하려면 summary
함수를 사용하십시오.
summary(T)
Description: Simulated Patient Data Variables: Age: 100x1 double Properties: Units: Yrs Values: Min 25 Median 39 Max 50 Smoker: 100x1 logical Properties: Description: true or false Values: True 34 False 66 BloodPressure: 100x2 double Properties: Description: Systolic/Diastolic Values: Column 1 Column 2 ________ ________ Min 109 68 Median 122 81.5 Max 138 99 SelfAssessedHealthStatus: 100x1 categorical Properties: Description: Status Reported by Patient Values: Excellent 34 Fair 15 Good 40 Poor 11
셀형 배열과의 비교
테이블과 마찬가지로, 셀형 배열은 혼합된 유형의 데이터를 단일 컨테이너에 저장할 수 있습니다. 그러나 테이블과 달리, 셀형 배열은 그 내용을 설명하는 메타데이터를 제공하지 않습니다. 셀형 배열에서는 열 내에 포함된 데이터가 동종 데이터가 아니어도 됩니다. 셀형 배열은 행 이름이나 열 이름을 사용하여 해당 내용에 액세스할 수 없습니다.
예를 들어, table2cell
함수를 사용하여 T
를 셀형 배열로 변환합니다. 출력된 셀형 배열은 동일한 데이터를 포함하지만, 이 데이터에 대한 정보는 없습니다. 데이터와 데이터의 정보를 함께 연결해 둘 필요가 있다면 셀형 배열에 저장하는 것보다 테이블에 저장하는 것이 더 좋은 선택입니다.
C = table2cell(T)
C=100×4 cell array
{[38]} {[1]} {[124 93]} {[Excellent]}
{[43]} {[0]} {[109 77]} {[Fair ]}
{[38]} {[0]} {[125 83]} {[Good ]}
{[40]} {[0]} {[117 75]} {[Fair ]}
{[49]} {[0]} {[122 80]} {[Good ]}
{[46]} {[0]} {[121 70]} {[Good ]}
{[33]} {[1]} {[130 88]} {[Good ]}
{[40]} {[0]} {[115 82]} {[Good ]}
{[28]} {[0]} {[115 78]} {[Excellent]}
{[31]} {[0]} {[118 86]} {[Excellent]}
{[45]} {[0]} {[114 77]} {[Excellent]}
{[42]} {[0]} {[115 68]} {[Poor ]}
{[25]} {[0]} {[127 74]} {[Poor ]}
{[39]} {[1]} {[130 95]} {[Excellent]}
{[36]} {[0]} {[114 79]} {[Good ]}
{[48]} {[1]} {[130 92]} {[Good ]}
⋮
셀형 배열 내 데이터의 서브셋에 액세스하려면 괄호 또는 중괄호를 사용한 인덱싱만 사용할 수 있습니다.
C(1:5,1:3)
ans=5×3 cell array
{[38]} {[1]} {[124 93]}
{[43]} {[0]} {[109 77]}
{[38]} {[0]} {[125 83]}
{[40]} {[0]} {[117 75]}
{[49]} {[0]} {[122 80]}
구조체와의 비교
구조체도 혼합된 유형의 데이터를 저장할 수 있습니다. 테이블 변수에 이름을 사용해서 액세스할 수 있는 것처럼, 구조체에는 필드가 있어서 마찬가지로 이름으로 액세스할 수 있습니다. 그러나 필드 내에 포함된 데이터는 동종 데이터가 아니어도 됩니다. 구조체는 해당 내용을 설명하는 메타데이터를 제공하지 않습니다.
예를 들어, 테이블 변수와 유사하게, T
를 각 필드가 배열인 스칼라 구조체로 변환합니다. table2struct
함수를 ToScalar
이름-값 인수와 함께 사용합니다.
S = table2struct(T,ToScalar=true)
S = struct with fields:
Age: [100x1 double]
Smoker: [100x1 logical]
BloodPressure: [100x2 double]
SelfAssessedHealthStatus: [100x1 categorical]
이 구조체에서, 필드 이름을 사용하여 데이터 배열에 액세스할 수 있습니다.
S.Age
ans = 100×1
38
43
38
40
49
46
33
40
28
31
⋮
그러나 필드 내 데이터의 서브셋에 액세스하려면 숫자형 인덱스만 사용할 수 있으며, 한 번에 하나의 필드에만 액세스할 수 있습니다. 테이블 행과 변수 인덱싱은 테이블의 데이터에 더 유연한 방식으로 액세스할 수 있게 해 줍니다.
S.Age(1:5)
ans = 5×1
38
43
38
40
49
참고 항목
table
| summary
| table2cell
| table2struct
| readtable