I have written a function in R that will convert a data frame containing letter grades into numeric grades. I then use sapply() on each column of the data frame. Is there a
First vectorize your function: you could do this with ifelse
, or:
grvec <- c("A+"=4.3,"A"=4,"A-"=3.7,"B+"=3.3,"B"=3,"B-"=2.7,
"C+"=2.3,"C"=2,"C-"=1.7,"D+"=1.3,"D"=1,"D-"= 0.7,
"F"=0)
grades <- data.frame(final_exam=c("C","C-","D+"),
quiz_avg=c("A","B-","Q"))
## final_exam quiz_avg
## 1 C A
## 2 C- B-
## 3 D+ Q
num_grades <- apply(grades,2,function(x) grvec[as.character(x)])
## final_exam quiz_avg
## [1,] 2.0 4.0
## [2,] 1.7 2.7
## [3,] 1.3 NA