В этом примере показано, как добавить и удалить уровни из номинального или порядкового массива.
Примечание
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