R: Simplifying code to convert letter grades to numeric grades

前端 未结 3 625
孤街浪徒
孤街浪徒 2021-01-17 22:27

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

3条回答
  •  栀梦
    栀梦 (楼主)
    2021-01-17 22:59

    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
    

提交回复
热议问题