Reputation: 25
Very simple question. Is there any disadvantage to using the 2nd approach outlined below versus approach 1? Or are they effectively identical. (I'm partial to approach 2 as I deal with some complicated conditioning of variables, and find it easier to track piping the variable from one line to the next, but concerned that it might be poor coding practice)
library(dplyr)
section <- c("MATH111", "MATH111", "ENG111")
grade <- c(78, 93, 56)
student <- c("David", "Kristina", "Mycroft")
gradebook <- data.frame(section, grade, student)
mutate(gradebook, Pass.Fail = ifelse(grade > 60, "Pass", "Fail"))
#approach 1
mutate(gradebook, letter = ifelse(grade %in% 60:69, "D",
ifelse(grade %in% 70:79, "C",
ifelse(grade %in% 80:89, "B",
ifelse(grade %in% 90:99, "A", "F")))))
#approach 2
gradebook$letter<-NA
gradebook <- gradebook %>%
mutate(letter=ifelse(grade < 60, "F",letter)) %>%
mutate(letter=ifelse(grade >60 & grade< 69, "D",letter)) %>%
mutate(letter=ifelse(grade >70 & grade< 79, "C",letter)) %>%
mutate(letter=ifelse(grade >80 & grade< 89, "B",letter)) %>%
mutate(letter=ifelse(grade >90 & grade< 99, "A",letter))
gradebook
Upvotes: 1
Views: 121
Reputation: 15123
It seems there are some typo, but if you try using dplyr::mutate
, in this case, dplyr::case_when
will helps.
gradebook %>%
mutate(letter = case_when(
grade < 60 ~ "F",
grade < 70 ~ "D",
grade < 80 ~ "C",
grade < 90 ~ "B",
grade < 100 ~ "A",
T ~ NA_character_
))
section grade student letter
1 MATH111 78 David C
2 MATH111 93 Kristina A
3 ENG111 56 Mycroft F
Upvotes: 2