В этом примере показано, как переформатировать массивы набора данных с помощью stack
и unstack
.
Импортируйте данные из текстового файла, разделенного запятыми testScores.csv
.
ds = dataset('File','testScores.csv','Delimiter',',')
ds = LastName Sex Test1 Test2 Test3 Test4 'HOWARD' 'male' 90 87 93 92 'WARD' 'male' 87 85 83 90 'TORRES' 'male' 86 85 88 86 'PETERSON' 'female' 75 80 72 77 'GRAY' 'female' 89 86 87 90 'RAMIREZ' 'female' 96 92 98 95 'JAMES' 'male' 78 75 77 77 'WATSON' 'female' 91 94 92 90 'BROOKS' 'female' 86 83 85 89 'KELLY' 'male' 79 76 82 80
Каждый из 10 студентов имеет 4 тестовых счета.
С помощью данных в этом формате можно, для примера, вычислить средний счет теста для каждого студента. Тестовые счета указаны в столбцах с 3 по 6.
ds.TestAve = mean(double(ds(:,3:6)),2); ds(:,{'LastName','Sex','TestAve'})
ans = LastName Sex TestAve 'HOWARD' 'male' 90.5 'WARD' 'male' 86.25 'TORRES' 'male' 86.25 'PETERSON' 'female' 76 'GRAY' 'female' 88 'RAMIREZ' 'female' 95.25 'JAMES' 'male' 76.75 'WATSON' 'female' 91.75 'BROOKS' 'female' 85.75 'KELLY' 'male' 79.25
Новая переменная со средними тестовыми счетами добавляется к массиву набора данных ds
.
Сложите переменные тестового счета в новую переменную, Scores
.
dsNew = stack(ds,{'Test1','Test2','Test3','Test4'},... 'newDataVarName','Scores')
dsNew = LastName Sex TestAve Scores_Indicator Scores 'HOWARD' 'male' 90.5 Test1 90 'HOWARD' 'male' 90.5 Test2 87 'HOWARD' 'male' 90.5 Test3 93 'HOWARD' 'male' 90.5 Test4 92 'WARD' 'male' 86.25 Test1 87 'WARD' 'male' 86.25 Test2 85 'WARD' 'male' 86.25 Test3 83 'WARD' 'male' 86.25 Test4 90 'TORRES' 'male' 86.25 Test1 86 'TORRES' 'male' 86.25 Test2 85 'TORRES' 'male' 86.25 Test3 88 'TORRES' 'male' 86.25 Test4 86 'PETERSON' 'female' 76 Test1 75 'PETERSON' 'female' 76 Test2 80 'PETERSON' 'female' 76 Test3 72 'PETERSON' 'female' 76 Test4 77 'GRAY' 'female' 88 Test1 89 'GRAY' 'female' 88 Test2 86 'GRAY' 'female' 88 Test3 87 'GRAY' 'female' 88 Test4 90 'RAMIREZ' 'female' 95.25 Test1 96 'RAMIREZ' 'female' 95.25 Test2 92 'RAMIREZ' 'female' 95.25 Test3 98 'RAMIREZ' 'female' 95.25 Test4 95 'JAMES' 'male' 76.75 Test1 78 'JAMES' 'male' 76.75 Test2 75 'JAMES' 'male' 76.75 Test3 77 'JAMES' 'male' 76.75 Test4 77 'WATSON' 'female' 91.75 Test1 91 'WATSON' 'female' 91.75 Test2 94 'WATSON' 'female' 91.75 Test3 92 'WATSON' 'female' 91.75 Test4 90 'BROOKS' 'female' 85.75 Test1 86 'BROOKS' 'female' 85.75 Test2 83 'BROOKS' 'female' 85.75 Test3 85 'BROOKS' 'female' 85.75 Test4 89 'KELLY' 'male' 79.25 Test1 79 'KELLY' 'male' 79.25 Test2 76 'KELLY' 'male' 79.25 Test3 82 'KELLY' 'male' 79.25 Test4 80
Исходные тестовые имена переменных, Test1
, Test2
, Test3
, и Test4
, появляются как уровни в переменной индикатора комбинированных счетов, Scores_Indicator
.
С данными в этом формате можно использовать Scores_Indicator
как сгруппированная переменная и построение прямоугольных графиков тестовых счетов, сгруппированных по тестам.
figure() boxplot(dsNew.Scores,dsNew.Scores_Indicator)
Переформатирование dsNew
назад в его оригинальный формат.
dsOrig = unstack(dsNew,'Scores','Scores_Indicator'); dsOrig(:,{'LastName','Test1','Test2','Test3','Test4'})
ans = LastName Test1 Test2 Test3 Test4 'HOWARD' 90 87 93 92 'WARD' 87 85 83 90 'TORRES' 86 85 88 86 'PETERSON' 75 80 72 77 'GRAY' 89 86 87 90 'RAMIREZ' 96 92 98 95 'JAMES' 78 75 77 77 'WATSON' 91 94 92 90 'BROOKS' 86 83 85 89 'KELLY' 79 76 82 80
Массив набора данных возвращается в широкий формат. unstack
переназначение уровней переменной индикатора, Scores_Indicator
, как имена переменных в не сложенном массиве набора данных.
dataset
| double
| stack
| unstack