테이블 및 타임테이블 연산에서 행 레이블 사용하기
테이블과 타임테이블은 데이터의 행에 레이블을 지정할 수 있는 여러 방법을 제공합니다. 테이블에서는 이름을 사용하여 행에 레이블을 지정할 수 있습니다. 타임테이블에서는 반드시 날짜, 시간 또는 둘 모두로 행에 레이블을 지정해야 합니다. 테이블의 경우 행 이름이 선택 사항이지만 타임테이블에서 행 시간값은 필수 사항입니다. 이러한 행 레이블은 테이블이나 타임테이블에서 메타데이터의 일부입니다. 또한, 일부 함수의 경우, 테이블 또는 타임테이블에서 데이터 변수를 사용할 수 있는 것과 마찬가지로 행 레이블을 키 변수, 그룹화 변수 등으로 사용할 수 있습니다. 이런 함수에는 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
데이터 변수 X
및 Y
를 기준으로 정렬합니다. 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'}
LastName
과 FirstName
을 키 변수로 사용하여 A
와 B
에 대한 내부 결합을 수행합니다.
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
,innerjoin
및outerjoin
함수의'Keys'
,'LeftKeys'
및'RightKeys'
인수에 대한 문서를 참조하십시오.
참고 항목
sortrows
| join
| innerjoin
| outerjoin
| varfun
| rowfun
| stack
| unstack