Main Content

データセット配列のスタック化とその解除

この例では、stackunstack を使用してデータセット配列を再構築する方法を示します。

標本データを読み込みます。

データをコンマ区切りのテキスト ファイル testScores.csv からインポートします。

ds = dataset('File','testScores.csv','Delimiter',',')
ds = 

    LastName            School                Test1    Test2    Test3
    {'Jeong'   }        {'XYZ School'}        90       87       93   
    {'Collins' }        {'XYZ School'}        87       85       83   
    {'Torres'  }        {'XYZ School'}        86       85       88   
    {'Phillips'}        {'ABC School'}        75       80       72   
    {'Ling'    }        {'ABC School'}        89       86       87   
    {'Ramirez' }        {'ABC School'}        96       92       98   
    {'Lee'     }        {'XYZ School'}        78       75       77   
    {'Walker'  }        {'ABC School'}        91       94       92   
    {'Garcia'  }        {'ABC School'}        86       83       85   
    {'Chang'   }        {'XYZ School'}        79       76       82    

10 名の生徒それぞれにテストの得点が 3 つずつあります。

データセット配列で計算を実行します。

この形式のデータでは、たとえば各生徒のテストの平均点を計算できます。テストの得点は 3 ~ 5 列目に格納されています。

ds.TestAve = mean(double(ds(:,3:5)),2);
ds(:,{'LastName','School','TestAve'})
ans = 

    LastName            School                TestAve
    {'Jeong'   }        {'XYZ School'}            90 
    {'Collins' }        {'XYZ School'}            85 
    {'Torres'  }        {'XYZ School'}        86.333 
    {'Phillips'}        {'ABC School'}        75.667 
    {'Ling'    }        {'ABC School'}        87.333 
    {'Ramirez' }        {'ABC School'}        95.333 
    {'Lee'     }        {'XYZ School'}        76.667 
    {'Walker'  }        {'ABC School'}        92.333 
    {'Garcia'  }        {'ABC School'}        84.667 
    {'Chang'   }        {'XYZ School'}            79   

データセット配列 ds には、テストの平均点を表す新しい変数が追加されています。

データセット配列を再構築します。

テストの得点を示す変数をスタック化して新しい変数 Scores に格納します。

 dsNew = stack(ds,{'Test1','Test2','Test3'},...
            'newDataVarName','Scores')
dsNew = 

    LastName            School                TestAve    Scores_Indicator    Scores
    {'Jeong'   }        {'XYZ School'}            90     Test1               90    
    {'Jeong'   }        {'XYZ School'}            90     Test2               87    
    {'Jeong'   }        {'XYZ School'}            90     Test3               93    
    {'Collins' }        {'XYZ School'}            85     Test1               87    
    {'Collins' }        {'XYZ School'}            85     Test2               85    
    {'Collins' }        {'XYZ School'}            85     Test3               83    
    {'Torres'  }        {'XYZ School'}        86.333     Test1               86    
    {'Torres'  }        {'XYZ School'}        86.333     Test2               85    
    {'Torres'  }        {'XYZ School'}        86.333     Test3               88    
    {'Phillips'}        {'ABC School'}        75.667     Test1               75    
    {'Phillips'}        {'ABC School'}        75.667     Test2               80    
    {'Phillips'}        {'ABC School'}        75.667     Test3               72    
    {'Ling'    }        {'ABC School'}        87.333     Test1               89    
    {'Ling'    }        {'ABC School'}        87.333     Test2               86    
    {'Ling'    }        {'ABC School'}        87.333     Test3               87    
    {'Ramirez' }        {'ABC School'}        95.333     Test1               96    
    {'Ramirez' }        {'ABC School'}        95.333     Test2               92    
    {'Ramirez' }        {'ABC School'}        95.333     Test3               98    
    {'Lee'     }        {'XYZ School'}        76.667     Test1               78    
    {'Lee'     }        {'XYZ School'}        76.667     Test2               75    
    {'Lee'     }        {'XYZ School'}        76.667     Test3               77    
    {'Walker'  }        {'ABC School'}        92.333     Test1               91    
    {'Walker'  }        {'ABC School'}        92.333     Test2               94    
    {'Walker'  }        {'ABC School'}        92.333     Test3               92    
    {'Garcia'  }        {'ABC School'}        84.667     Test1               86    
    {'Garcia'  }        {'ABC School'}        84.667     Test2               83    
    {'Garcia'  }        {'ABC School'}        84.667     Test3               85    
    {'Chang'   }        {'XYZ School'}            79     Test1               79    
    {'Chang'   }        {'XYZ School'}            79     Test2               76    
    {'Chang'   }        {'XYZ School'}            79     Test3               82       

元のテスト用変数の名前である Test1Test2Test3 は、結合後のテスト得点指標変数 Scores_Indicator のレベルとして表示されます。

カテゴリ別にデータをプロットします。

この形式のデータでは、Scores_Indicator をグループ化変数として使用し、テストごとの得点の箱ひげ図を作成することができます。

figure()
boxplot(dsNew.Scores,dsNew.Scores_Indicator)

データセット配列を元の形式に戻します。

dsNew を再構築して元の形式に戻します。

dsOrig = unstack(dsNew,'Scores','Scores_Indicator');
dsOrig(:,{'LastName','Test1','Test2','Test3'})
ans = 

    LastName            Test1    Test2    Test3
    {'Jeong'   }        90       87       93   
    {'Collins' }        87       85       83   
    {'Torres'  }        86       85       88   
    {'Phillips'}        75       80       72   
    {'Ling'    }        89       86       87   
    {'Ramirez' }        96       92       98   
    {'Lee'     }        78       75       77   
    {'Walker'  }        91       94       92   
    {'Garcia'  }        86       83       85   
    {'Chang'   }        79       76       82    

データセット配列の形式が幅形式に戻ります。unstack を使用すると、指標変数 Scores_Indicator のレベルが、スタック解除されたデータセット配列の変数名として再度割り当てられます。

参考

| | |

関連する例

詳細