В этом примере показано, как добавить и удалить уровни из номинального или порядкового массива.
Примечание
The nominal
и ordinal
типы данных массива не рекомендованы. Чтобы представлять упорядоченные и неупорядоченные дискретные нечисловые данные, используйте вместо этого тип данных Категориальные Массивы.
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