Main Content

테이블 및 타임테이블 연산에서 행 레이블 사용하기

테이블과 타임테이블은 데이터의 행에 레이블을 지정할 수 있는 여러 방법을 제공합니다. 테이블에서는 이름을 사용하여 행에 레이블을 지정할 수 있습니다. 타임테이블에서는 반드시 날짜, 시간 또는 둘 모두로 행에 레이블을 지정해야 합니다. 테이블의 경우 행 이름이 선택 사항이지만 타임테이블에서 행 시간값은 필수 사항입니다. 이러한 행 레이블은 테이블이나 타임테이블에서 메타데이터의 일부입니다. 또한, 일부 함수의 경우, 테이블 또는 타임테이블에서 데이터 변수를 사용할 수 있는 것과 마찬가지로 행 레이블을 키 변수, 그룹화 변수 등으로 사용할 수 있습니다. 이런 함수에는 sortrows, join, innerjoin, outerjoin, varfun, rowfun, stack, unstack이 있습니다. 이런 테이블 함수를 사용하거나 행 레이블을 키 변수로 사용할 때 몇 가지 제한 사항이 있습니다.

행 레이블을 기준으로 정렬하기

예를 들어, 행 시간값 또는 하나 이상의 데이터 변수를 기준으로 타임테이블을 정렬하거나, 행 시간값과 데이터 변수를 모두 기준으로 사용하여 타임테이블을 정렬할 수 있습니다.

timetable 함수를 사용하여 타임테이블을 만듭니다. 타임테이블의 첫 번째 차원에는 행에 레이블을 지정하는 행 시간값이 있습니다. 행 시간값은 타임테이블 변수가 아니라 타임테이블의 속성입니다.

Date = datetime(2016,7,[10;10;11;11;10;10;11;11]);
X = [1;1;1;1;2;2;2;2];
Y = {'a';'b';'a';'b';'a';'b';'a';'b'};
Z = [1;2;3;4;5;6;7;8];
TT = timetable(X,Y,Z,'RowTimes',Date)
TT=8×3 timetable
       Time        X      Y      Z
    ___________    _    _____    _

    10-Jul-2016    1    {'a'}    1
    10-Jul-2016    1    {'b'}    2
    11-Jul-2016    1    {'a'}    3
    11-Jul-2016    1    {'b'}    4
    10-Jul-2016    2    {'a'}    5
    10-Jul-2016    2    {'b'}    6
    11-Jul-2016    2    {'a'}    7
    11-Jul-2016    2    {'b'}    8

첫 번째 차원의 이름을 바꿉니다. 기본적으로 타임테이블의 첫 번째 차원 이름은 Time입니다. Properties.DimensionNames 속성에 액세스하여 차원의 이름을 바꿀 수 있습니다.

TT.Properties.DimensionNames{1} = 'Date';
TT.Properties.DimensionNames
ans = 1x2 cell
    {'Date'}    {'Variables'}

다른 방법으로, 'RowTimes'를 지정하지 않고 행 시간값을 timetable에 대한 첫 번째 입력 인수로 지정할 수 있습니다. timetable 함수는 다른 입력 인수 다음에 타임테이블 변수의 이름을 지정하는 것처럼, 첫 번째 입력 인수 다음에 행 시간값 즉, 첫 번째 차원의 이름을 지정합니다.

TT = timetable(Date,X,Y,Z)
TT=8×3 timetable
       Date        X      Y      Z
    ___________    _    _____    _

    10-Jul-2016    1    {'a'}    1
    10-Jul-2016    1    {'b'}    2
    11-Jul-2016    1    {'a'}    3
    11-Jul-2016    1    {'b'}    4
    10-Jul-2016    2    {'a'}    5
    10-Jul-2016    2    {'b'}    6
    11-Jul-2016    2    {'a'}    7
    11-Jul-2016    2    {'b'}    8

행 시간값을 기준으로 타임테이블을 정렬합니다. 행 시간값을 기준으로 정렬하려면 이름으로 타임테이블의 첫 번째 차원을 참조하십시오.

sortrows(TT,'Date')
ans=8×3 timetable
       Date        X      Y      Z
    ___________    _    _____    _

    10-Jul-2016    1    {'a'}    1
    10-Jul-2016    1    {'b'}    2
    10-Jul-2016    2    {'a'}    5
    10-Jul-2016    2    {'b'}    6
    11-Jul-2016    1    {'a'}    3
    11-Jul-2016    1    {'b'}    4
    11-Jul-2016    2    {'a'}    7
    11-Jul-2016    2    {'b'}    8

데이터 변수 XY를 기준으로 정렬합니다. sortrows는 먼저 X를 기준으로 정렬한 다음 Y를 기준으로 정렬합니다.

sortrows(TT,{'X' 'Y'})
ans=8×3 timetable
       Date        X      Y      Z
    ___________    _    _____    _

    10-Jul-2016    1    {'a'}    1
    11-Jul-2016    1    {'a'}    3
    10-Jul-2016    1    {'b'}    2
    11-Jul-2016    1    {'b'}    4
    10-Jul-2016    2    {'a'}    5
    11-Jul-2016    2    {'a'}    7
    10-Jul-2016    2    {'b'}    6
    11-Jul-2016    2    {'b'}    8

행 시간값과 X를 모두 기준으로 사용하여 정렬합니다.

sortrows(TT,{'Date' 'X'})
ans=8×3 timetable
       Date        X      Y      Z
    ___________    _    _____    _

    10-Jul-2016    1    {'a'}    1
    10-Jul-2016    1    {'b'}    2
    10-Jul-2016    2    {'a'}    5
    10-Jul-2016    2    {'b'}    6
    11-Jul-2016    1    {'a'}    3
    11-Jul-2016    1    {'b'}    4
    11-Jul-2016    2    {'a'}    7
    11-Jul-2016    2    {'b'}    8

행 레이블을 그룹화 변수 또는 키 변수로 사용하기

rowfun, varfun, stack, unstack 함수를 사용하여 행을 함께 그룹화하면 행 레이블을 그룹화 변수로 지정할 수 있습니다. join, innerjoin, outerjoin 함수를 사용하여 테이블이나 타임테이블을 함께 결합하면 행 레이블을 키 변수로 지정할 수 있습니다.

예를 들어, 행 이름과 테이블 변수를 함께 키 변수로 사용하여 두 테이블을 내부 결합할 수 있습니다. 내부 결합(Inner join)은 키 변수에 대해 일치하는 테이블 행만 유지합니다.

환자 데이터로 구성된 두 개 테이블을 만듭니다. 테이블의 첫 번째 차원에는 행에 레이블을 지정하는 행 이름이 있을 수 있지만, 행 이름이 반드시 있어야 하는 것은 아닙니다. 환자의 성을 테이블의 행 이름으로 지정합니다. 환자의 이름을 테이블 변수로 추가합니다.

A = table({'Michael';'Louis';'Alice';'Rosemary';'Julie'},[38;43;45;40;49],...
    'VariableNames',{'FirstName' 'Age'},...
    'RowNames',{'Garcia' 'Johnson' 'Wu' 'Jones' 'Picard'})
A=5×2 table
                FirstName      Age
               ____________    ___

    Garcia     {'Michael' }    38 
    Johnson    {'Louis'   }    43 
    Wu         {'Alice'   }    45 
    Jones      {'Rosemary'}    40 
    Picard     {'Julie'   }    49 

B = table({'Michael';'Beverly';'Alice'},...
    [64;69;67],...
    [119;163;133],...
    [122 80; 109 77; 117 75],...
    'VariableNames',{'FirstName' 'Height' 'Weight' 'BloodPressure'},...
    'RowNames',{'Garcia' 'Johnson' 'Wu'})
B=3×4 table
                FirstName     Height    Weight    BloodPressure
               ___________    ______    ______    _____________

    Garcia     {'Michael'}      64       119       122     80  
    Johnson    {'Beverly'}      69       163       109     77  
    Wu         {'Alice'  }      67       133       117     75  

테이블에 행 이름이 있는 경우 행 이름을 기준으로 테이블의 요소를 참조할 수 있습니다. 행 이름을 기준으로 인덱싱하면 테이블의 행을 편리하게 선택할 수 있습니다. 환자에 대한 정보를 검색하려면 환자의 성을 기준으로 B의 요소를 참조하십시오.

B('Garcia',:)
ans=1×4 table
               FirstName     Height    Weight    BloodPressure
              ___________    ______    ______    _____________

    Garcia    {'Michael'}      64       119       122     80  

두 테이블에서 내부 결합을 수행합니다. 두 테이블 모두 환자의 성을 행 이름으로 사용하고 이름을 테이블 변수로 포함합니다. 두 테이블에 있는 일부 환자는 성은 일치하지만 이름이 서로 다릅니다. 성과 이름이 모두 일치하는지 확인하려면 행 이름과 FirstName을 키 변수로 사용하십시오. 행 이름을 키 변수 또는 그룹화 변수로 지정하려면 테이블의 첫 번째 차원의 이름을 사용하십시오. 기본적으로, 첫 번째 차원의 이름은 'Row'입니다.

C = innerjoin(A,B,'Keys',{'Row','FirstName'})
C=2×5 table
               FirstName     Age    Height    Weight    BloodPressure
              ___________    ___    ______    ______    _____________

    Garcia    {'Michael'}    38       64       119       122     80  
    Wu        {'Alice'  }    45       67       133       117     75  

테이블의 첫 번째 차원의 이름을 바꿀 경우 'Row'를 사용하는 대신 해당 이름으로 행 이름을 참조할 수 있습니다. 행 이름을 참조하려면 위와 동일한 내부 결합을 수행하되 다른 이름을 사용하십시오.

Properties.DimensionNames 속성에 액세스하여 A의 차원 이름을 표시합니다.

A.Properties.DimensionNames
ans = 1x2 cell
    {'Row'}    {'Variables'}

Properties.DimensionNames 속성을 사용하여 테이블의 첫 번째 차원의 이름을 변경합니다. 그런 다음, 새 이름을 키 변수로 사용합니다.

A.Properties.DimensionNames{1} = 'LastName';
A.Properties.DimensionNames
ans = 1x2 cell
    {'LastName'}    {'Variables'}

LastNameFirstName을 키 변수로 사용하여 AB에 대한 내부 결합을 수행합니다.

B.Properties.DimensionNames{1} = 'LastName';
D = innerjoin(A,B,'Keys',{'LastName','FirstName'})
D=2×5 table
               FirstName     Age    Height    Weight    BloodPressure
              ___________    ___    ______    ______    _____________

    Garcia    {'Michael'}    38       64       119       122     80  
    Wu        {'Alice'  }    45       67       133       117     75  

테이블 함수와 행 레이블 사용에 대한 참고 사항

  • stack 함수와 unstack 함수를 사용하여 행 레이블을 누적하거나 해체할 수 없습니다. 그러나 행 레이블을 그룹화 변수로 사용할 수 있습니다.

  • 첫 번째 인수가 테이블이고 두 번째 인수가 타임테이블이면 join, innerjoin 또는 outerjoin 함수를 사용하여 결합(Join)을 수행할 수 없습니다. 그러나 두 인수가 모두 테이블 또는 모두 타임테이블이거나, 첫 번째 인수가 타임테이블이고 두 번째 인수가 테이블이면 결합을 수행할 수 있습니다.

  • 행 레이블을 키 변수로 지정하면 결합 연산의 출력값에 행 레이블을 포함시킬 수 있습니다. 결합 연산으로 반환되는 행 레이블에 대한 자세한 내용은 join, innerjoinouterjoin 함수의 'Keys', 'LeftKeys''RightKeys' 인수에 대한 문서를 참조하십시오.

참고 항목

| | | | | | |