2016-08-13 2 views
2

Я пытаюсь маркировать значения в зависимости от диапазона, в который они попадают, как вы могли бы, например, присвоить задания. Так что, если у меня есть кадр данных средних баллов викторины, и кадр данных числовых значений, которые я использую в качестве нижнего среза для присвоения классов для этих средств:Почему объект `cut` на мои метки?

grades <- read.table(text="Student Mean 
Adam 94 
Amanda 85.5 
James 81 
Noah 72.8333333333333 
Zach 57.5", header = TRUE) 

letters <- read.table(text = "Letter Cutoff 
A 90 
B 80 
C 70 
D 60 
F 0", header = TRUE) 

Я думал, что я мог бы использовать cut для присваивать каждому классу оценку.

я могу использовать cut в ведро это, но я сталкиваются два раздражающей проблемы:

во-первых, эти обрезаний являются минимальными, а не максимум, и я не вижу способ переложить это. И, во-вторых, cut не хочет использовать оценки букв в качестве меток. Если я это сделаю:

cut(grades$Mean, 
    breaks = letters$Cutoff, 
    labels = letters$Letter, 
    right = FALSE) 

Я получаю ошибку, lengths of 'breaks' and 'labels' differ. Можно ли использовать cut для присвоения меток значениям таким образом?

+2

Ваше определение разломов не учитывает баллы> 90. Если вы добавите дополнительный разрыв в 100, он будет работать: 'cut (оценки $ Mean, breaks = c (100, 90, 80, 70, 60, 0), метки = rev (буквы $ Letter), right = FALSE)' – Dave2e

ответ

4

Вектор breaks должен быть на один элемент длиннее, чем вектор labels: для каждой категории вам необходимо как нижнее, так и верхнее обрезание. Просто закрепите 100 (верхний предел) на конце вектора breaks (возможно, вам нужно быть 100,5, если у вас есть оценки ровно 100 ...) Как указано в комментарии выше, вы должны иметь свои перерывы в порядке возрастания. .

cut(grades$Mean, 
    breaks = c(rev(letters$Cutoff),100), 
    labels = rev(letters$Letter), 
    right = FALSE) 
## [1] A B B C F 
## Levels: F D C B A 
+0

Я пошел с 'c (rev (буквы $ Cutoff), max (оценки $ Mean) + 1)', потому что фактические данные не так чисты. Но он все еще работает. – Amanda

Смежные вопросы