Main Content

혼합된 데이터로 구성된 테이블

단일 컨테이너에 관련 데이터 저장하기

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

참고 항목

| | | |

관련 항목