Main Content

stack

입력 테이블/타임테이블의 데이터를 출력 테이블/타임테이블의 변수 하나에 쌓기

설명

예제

S = stack(U,vars)는 입력 테이블/타임테이블 U를 누적 테이블/타임테이블 S로 변환합니다. 함수는 U의 여러 변수에서 가져온 값을 S의 변수 하나에 누적합니다. 입력 인수 varsU에 있는 변수의 이름이나 위치를 기준으로 U의 어느 변수를 누적할지 지정합니다.

U에 행이 n개 있고 varsUm개 변수를 지정하는 경우 Sm*n개 행을 갖습니다. stack 함수는 U에 지정한 변수들의 값을 차례차례 결합해 S에 하나의 변수로 만듭니다. 예를 들어, U에 행이 10개 있고 U의 변수 3개를 누적할 경우, S에 30개 행이 생깁니다. 일반적으로, SU보다 변수 개수가 적지만, 행 개수는 더 많습니다.

출력값인 테이블 또는 타임테이블 S에는 S에 누적된 각 행의 데이터가 U의 어느 변수에서 왔는지를 나타내는 새로운 categorical형 변수가 있습니다. stack 함수는 U의 누적하지 않은 변수의 데이터는 그대로 복제합니다.

  • U가 테이블인 경우 행 이름은 누적할 수 없습니다.

  • U가 타임테이블인 경우 행 시간값은 누적할 수 없습니다.

S = stack(U,{vars1,...,varsN}){vars1,...,varsN}으로 지정된 변수의 값을 SN개 변수에 누적합니다. 자세한 내용은 출력값에 여러 개의 누적 변수 만들기 항목을 참조하십시오.

예제

S = stack(___,Name,Value)는 하나 이상의 이름-값 인수를 추가 옵션으로 지정하여 테이블 U를 변환합니다.

예를 들어, S의 새 누적 변수의 이름을 지정할 수 있습니다.

예제

[S,iu] = stack(___)S의 행과 U의 행 사이의 대응 관계를 나타내는 인덱스 벡터 iu도 반환합니다. 위에 열거된 모든 입력 인수를 사용할 수 있습니다.

예제

모두 축소

3개의 개별 시험에서 얻은 시험 점수를 포함하는 테이블을 만듭니다. 테이블은 누적되지 않은 형식입니다.

Test1 = [93;57;87;89];
Test2 = [89;77;92;86];
Test3 = [95;62;89;91];

U = table(Test1,Test2,Test3)
U=4×3 table
    Test1    Test2    Test3
    _____    _____    _____

     93       89       95  
     57       77       62  
     87       92       89  
     89       86       91  

테이블에는 4개의 행과 3개의 변수가 있습니다.

시험 점수를 하나의 변수에 누적합니다.

S = stack(U,1:3)
S=12×2 table
    Test1_Test2_Test3_Indicator    Test1_Test2_Test3
    ___________________________    _________________

               Test1                      93        
               Test2                      89        
               Test3                      95        
               Test1                      57        
               Test2                      77        
               Test3                      62        
               Test1                      87        
               Test2                      92        
               Test3                      89        
               Test1                      89        
               Test2                      86        
               Test3                      91        

S에는 12개의 행과 2개의 변수가 포함되어 있습니다. S는 누적된 형식입니다.

categorical형 변수 Test1_Test2_Test3_Indicator는 어떤 시험 점수가 누적 데이터 변수 Test1_Test2_Test3에 대응하는지를 식별합니다.

다섯 번의 폭풍으로 인한 세 도시의 강설량을 나타내는 타임테이블을 만듭니다. 폭풍의 날짜를 datetime형 값으로 지정하여 타임테이블 U의 행 시간값으로 사용합니다. 이 타임테이블에는 폭풍 번호가 모두 고정되어 있으므로 폭풍 번호인 Storm의 배열을 categorical형 배열로 지정합니다.

Storm = categorical([1;2;3;4;5]);
Date = datetime({'2011-12-25';'2012-01-02';'2012-01-23';'2012-02-07';'2012-02-15'});
Natick = [20;5;13;0;17];
Boston = [18;9;21;5;12];
Worcester = [26;10;16;3;15];

U = timetable(Date,Storm,Natick,Boston,Worcester)
U=5×4 timetable
       Date        Storm    Natick    Boston    Worcester
    ___________    _____    ______    ______    _________

    25-Dec-2011      1        20        18         26    
    02-Jan-2012      2         5         9         10    
    23-Jan-2012      3        13        21         16    
    07-Feb-2012      4         0         5          3    
    15-Feb-2012      5        17        12         15    

변수 StormDate에는 각 지역에서 볼 때 상수인 데이터가 포함됩니다.

변수 Natick, Boston, Worcester를 하나의 변수에 누적합니다. 누적 데이터를 포함할 변수 Snowfall과 새 표시 변수 Town에 이름을 지정합니다.

S = stack(U,{'Natick','Boston','Worcester'},...
          'NewDataVariableName','Snowfall',...
          'IndexVariableName','Town')
S=15×3 timetable
       Date        Storm      Town       Snowfall
    ___________    _____    _________    ________

    25-Dec-2011      1      Natick          20   
    25-Dec-2011      1      Boston          18   
    25-Dec-2011      1      Worcester       26   
    02-Jan-2012      2      Natick           5   
    02-Jan-2012      2      Boston           9   
    02-Jan-2012      2      Worcester       10   
    23-Jan-2012      3      Natick          13   
    23-Jan-2012      3      Boston          21   
    23-Jan-2012      3      Worcester       16   
    07-Feb-2012      4      Natick           0   
    07-Feb-2012      4      Boston           5   
    07-Feb-2012      4      Worcester        3   
    15-Feb-2012      5      Natick          17   
    15-Feb-2012      5      Boston          12   
    15-Feb-2012      5      Worcester       15   

S에는 각 폭풍에 대한 3개 행이 포함되며, 이에 맞춰 stack은 상수 변수인 StormDate의 데이터를 반복해 삽입합니다.

categorical형 변수 TownU의 어떤 변수가 이에 대응하는 Snowfall 데이터를 포함하는지 식별합니다.

미국의 동부 연안을 따라 추정된 월별 인플루엔자 발생률을 포함하는 타임테이블을 만듭니다. 북동부, 미국 동부 연안, 남대서양 지역에 대한 각각의 변수를 만듭니다. 데이터 소스: Google Flu Trends 프로젝트(중단됨). datetime 배열을 타임테이블의 행 시간값으로 사용합니다.

Month = datetime(2005,10,1,'Format','MMMM yyyy') + calmonths(0:5);
Month = Month';
NE = [1.1902; 1.3610; 1.5003; 1.7772; 2.1350; 2.2345];
MidAtl = [1.1865; 1.4120; 1.6043; 1.8830; 2.1227; 1.9920];
SAtl = [1.2730; 1.5820; 1.8625; 1.9540; 2.4803; 2.0203];

fluU = timetable(Month,NE,MidAtl,SAtl)
fluU=6×3 timetable
        Month          NE      MidAtl     SAtl 
    _____________    ______    ______    ______

    October 2005     1.1902    1.1865     1.273
    November 2005     1.361     1.412     1.582
    December 2005    1.5003    1.6043    1.8625
    January 2006     1.7772     1.883     1.954
    February 2006     2.135    2.1227    2.4803
    March 2006       2.2345     1.992    2.0203

변수 Month에는 각 행에서 상수인 데이터가 포함됩니다.

변수 NE, MidAtl, SAtlFluRate라는 단일 변수에 누적합니다. 새 표시 변수 Region에 이름을 지정하고 인덱스 벡터 ifluU를 출력하여 누적되지 않은 입력 테이블 fluU의 행과 누적된 출력 테이블 fluS 간의 대응 관계를 표시합니다.

[fluS,ifluU] = stack(fluU,1:3,...
                     'NewDataVariableName','FluRate',...
                     'IndexVariableName','Region')
fluS=18×2 timetable
        Month        Region    FluRate
    _____________    ______    _______

    October 2005     NE        1.1902 
    October 2005     MidAtl    1.1865 
    October 2005     SAtl       1.273 
    November 2005    NE         1.361 
    November 2005    MidAtl     1.412 
    November 2005    SAtl       1.582 
    December 2005    NE        1.5003 
    December 2005    MidAtl    1.6043 
    December 2005    SAtl      1.8625 
    January 2006     NE        1.7772 
    January 2006     MidAtl     1.883 
    January 2006     SAtl       1.954 
    February 2006    NE         2.135 
    February 2006    MidAtl    2.1227 
    February 2006    SAtl      2.4803 
    March 2006       NE        2.2345 
      ⋮

ifluU = 18×1

     1
     1
     1
     2
     2
     2
     3
     3
     3
     4
      ⋮

ifluU(5)2입니다. 출력 테이블 fluS의 다섯 번째 행에 입력 테이블 fluU의 두 번째 행의 데이터가 포함됩니다.

입력 인수

모두 축소

입력 테이블로, table형이나 timetable형으로 지정됩니다.

누적할 U의 변수로, 양의 정수, 양의 정수로 구성된 벡터, string형 배열, 문자형 벡터, 문자형 벡터로 구성된 셀형 배열 또는 pattern 스칼라로 지정됩니다.

예: S = stack(U,1:4)U의 처음 4개 변수를 S의 변수 하나에 누적합니다.

예: S = stack(U,{'Var1',Var3','Var5'})는 이름이 Var1, Var3, Var5U의 변수들을 누적합니다.

이름-값 인수

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name을 따옴표로 묶으십시오.

예: 'NewDataVariableName','StackedData'는 새 데이터 변수 StackedData에 이름을 지정합니다.

vars 이외에 출력값에 포함시킬 변수로, 'ConstantVariables'와 함께 양의 정수, 양의 정수로 구성된 벡터, string형 배열, 문자형 벡터, 문자형 벡터로 구성된 셀형 배열, pattern 스칼라 또는 논리형 벡터가 쉼표로 구분되어 지정됩니다. stack은 같은 행에서 가져온, 각각의 누적 요소에 대응하는 상수 변수의 데이터를 복제합니다.

디폴트 값은 vars에서 지정하지 않은 U의 모든 변수입니다. 'ConstantVariables' 이름-값 쌍의 인수를 사용하여 vars'ConstantVariables'에서 지정하지 않은 변수를 출력 테이블 S에서 제외시킬 수 있습니다.

U는 첫 번째 차원에서 행 레이블을 가질 수 있습니다. U가 테이블인 경우 행 이름을 레이블로 가질 수 있습니다. U가 타임테이블인 경우 행 시간값을 레이블로 가져야 합니다.

  • 'ConstantVariables'의 값을 지정할 때 행 이름이나 행 시간값을 포함시킬 수 있습니다.

  • 'ConstantVariables'에 행 이름이나 행 시간값을 포함시키지 않아도 stack은 행 이름이나 행 시간값을 복제합니다.

S의 새 데이터 변수에 대한 이름으로, 'NewDataVariableName'과 함께 문자형 벡터, string형 배열 또는 문자형 벡터로 구성된 셀형 배열이 쉼표로 구분되어 지정됩니다. 디폴트 값은 누적할 U의 변수들의 이름을 결합한 것입니다.

S의 새 표시 변수에 대한 이름으로, 'IndexVariableName'과 함께 문자형 벡터 또는 string형 스칼라가 쉼표로 구분되어 지정됩니다. 디폴트 값은 NewDataVariableName에 기반한 이름입니다.

출력 인수

모두 축소

누적 테이블로, 테이블이나 타임테이블로 반환됩니다. S는 누적 데이터 변수, categorical형 표시 변수, 모든 상수 변수를 포함합니다.

설명, 변수 단위, 변수 이름, 행 이름과 같은 메타데이터를 추가로 S에 저장할 수 있습니다. 자세한 내용은 table 또는 timetable 속성 설명을 참조하십시오.

stackvars에 나열된 첫 번째 변수에서 변수 단위 속성값과 변수 설명 속성값을 새 데이터 변수의 대응하는 S.Properties.VariableUnits 값과 S.Properties.VariableDescrisciptions 값에 할당합니다.

U에 대한 인덱스로, 열 벡터로 반환됩니다. 인덱스 벡터 iu는 대응하는 데이터가 포함된 입력 테이블 U의 행을 식별합니다. stackU(iu(j),vars)를 사용하여 출력 테이블 S에서 j번째 행을 만듭니다.

알고리즘

모두 축소

출력값에 여러 개의 누적 변수 만들기

  • 입력값을 출력값의 여러 변수에 쌓을 수 있습니다. S에 누적 변수를 여러 개 만들려면 셀형 배열을 사용하여 U로부터 변수 그룹을 여러 개 지정하십시오. vars에 대한 여러 개의 값을 포함하려면 셀형 배열을 사용하고, 'NewDataVariableName' 이름-값 쌍의 인수에 대한 여러 개의 값을 포함하려면 문자형 벡터로 구성된 셀형 배열 또는 string형 배열을 사용하십시오. 모든 그룹은 동일한 개수의 변수를 포함해야 합니다.

    예를 들어, U에 4개의 변수가 있으면 다음 구문을 사용하여 S에 하나가 아닌 두 개의 누적 변수를 만들 수 있습니다.

    vars = {[1 2],[3 4]};
    S = stack(U,vars)
    

    그 결과, SU의 첫 번째 변수와 두 번째 변수의 값이 누적된 변수, 그리고 U의 세 번째 변수와 네 번째 변수의 값이 누적된 또 다른 변수를 갖습니다.

    S에 새 변수 이름을 지정하려면 'NewDataVariableName'을 사용하십시오. 지정하는 이름의 개수는 vars에 지정된 그룹 개수와 같아야 합니다.

    vars = {[1 2],[3 4]};
    S = stack(U,vars,'NewDataVariableName',{'Vars1And2','Vars3And4'})
    

  • vars를 문자형 벡터로 구성된 셀형 배열로 지정하는 경우 S는 하나의 누적 변수를 포함합니다. 변수 이름을 사용하면서 여러 개의 누적 변수를 지정하려면 문자형 벡터의 셀형 배열로 구성된 셀형 배열 또는 string형 배열로 구성된 셀형 배열을 사용하십시오.

    예를 들어, 다음 구문은 UVar1, Var2, Var3, Var4 변수를 갖는 테이블일 때 S에 하나의 누적 변수를 만듭니다.

    S = stack(U,{'Var1','Var2','Var3','Var4'})
    

    다음 구문은 S에 두 개의 누적 변수를 만듭니다.

    S = stack(U,{{'Var1','Var2'} {'Var3','Var4'}})
    

확장 기능

버전 내역

R2013b에 개발됨