В этом примере показано, как добавить и исключить уровни из номинального или порядкового массива.
nominal
и ordinal
типы данных массива не рекомендуются. Чтобы представлять упорядоченный и неупорядоченные дискретные, нечисловые данные, используйте Категориальные массивы (MATLAB) тип данных вместо этого.
load('examgrades')
Массив grades
содержит баллы экзамена от 0 до 100 на пяти экзаменах для выборки 120 студентов.
Присвойте буквенные оценки каждому студенту для каждого теста с помощью этих категорий.
Градуируйте область значений | Буквенная оценка |
---|---|
100 | + |
90–99 | A |
80–89 | B |
70–79 | C |
60–69 | D |
letter = ordinal(grades,{'D','C','B','A','A+'},[],... [60,70,80,90,100,100]); getlevels(letter)
ans = D C B A A+
Существует пять категорий класса в заданном порядке D
<C
<B
<A
<A+
.
Проверяйте, существуют ли какие-либо баллы экзамена, которые не попадают в пять категорий буквы.
any(isundefined(letter))
ans = 1 0 1 1 0
Вспомните, что существует пять музыки экзамена к каждому студенту. Предыдущая команда возвращает логическое значение для каждого из этих пяти экзаменов, указывая, существуют ли какие-либо баллы, которые являются <undefined>
. Существует музыка к первым, третьим, и четвертым экзаменам, которые являются <undefined>
, то есть, пропуская уровень категории.
Можно найти баллы экзамена, которые не имеют буквенной оценки с помощью isundefined
логическое условие.
grades(isundefined(letter))
ans = 55 59 58 59 54 57 56 59 59 50 59 52
Баллы экзамена, которые находятся в 50-х, не имеют буквенной оценки.
Поместите все баллы, которые являются <undefined>
в новую категорию пометил D-
.
letter(isundefined(letter)) = 'D-';
getlevels(letter)
Warning: Categorical level 'D-' being added. > In categorical.subsasgn at 55 ans = D C B A A+ D-
letter
, добавили новую категорию в конец. Переупорядочьте категории так, чтобы D-
<D
.
letter = reorderlevels(letter,{'D-','D','C','B','A','A+'}); getlevels(letter)
ans = D- D C B A A+
Теперь, когда все баллы экзамена имеют буквенную оценку, рассчитывают, сколько студентов получило более высокую буквенную оценку на втором тесте, чем на первом тесте.
sum(letter(:,2) > letter(:,1))
ans = 32
Тридцать два студента улучшили свою буквенную оценку между первыми двумя экзаменами.
Считайте количество A+
баллы на каждом из этих пяти экзаменов.
sum(letter=='A+')
ans = 0 0 0 0 0
Нет никакого A+
баллы на любом из этих пяти экзаменов.
Пропустите категорию A+
от порядковой переменной, letter
.
letter = droplevels(letter,'A+');
getlevels(letter)
ans = D- D C B A
A+
больше не находится в порядковой переменной, letter
.droplevels
| ordinal
| reorderlevels