Нет необходимости в ifelse
, вы можете сделать следующее:
df$numericGrade = NA
df$numericGrade[df$grade=="A"] = 13
df$numericGrade[df$grade=="A-"] = 12
df$numericGrade[df$grade=="B+"] = 11
df$numericGrade[df$grade=="C-"] = 6
Например:
df = data.frame(Name = c("John", "Mary", "Timmy", "Susan"), grade = c("B+", "A", "C-", "DNF"))
Name grade
1 John B+
2 Mary A
3 Timmy C-
4 Susan DNF
применение предыдущих строк приводит к:
Name grade numericGrade
1 John B+ 11
2 Mary A 13
3 Timmy C- 6
4 Susan DNF NA
Конечно, это занимает одну строку для каждого случая, и мой пример не завершен.
Использование слияния
Другой вариант - использовать merge
.В этом случае вам нужно иметь другой фрейм данных с преобразованием оценок:
gradesDict = data.frame(letter = c("A", "A-", "B+", "C-"),
number = c(13, 12, 11, 6))
letter number
1 A 13
2 A- 12
3 B+ 11
4 C- 6
, а затем выполнить:
df = merge(df, gradesDict, by.x = "grade", by.y = "letter", all.x = T)
grade Name number
1 A Mary 13
2 B+ John 11
3 C- Timmy 6
4 DNF Susan NA