データセット配列のスタック化とその解除
この例では、stack
と unstack
を使用してデータセット配列を再構築する方法を示します。
標本データを読み込みます。
データをコンマ区切りのテキスト ファイル 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
元のテスト用変数の名前である Test1
、Test2
、Test3
は、結合後のテスト得点指標変数 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
のレベルが、スタック解除されたデータセット配列の変数名として再度割り当てられます。
参考
dataset
| double
| stack
| unstack