Using mutate() and ifelse()

  • 本文关键字:ifelse and mutate Using r
  • 更新时间 :
  • 英文 :


非常简单的问题。与方法1相比,使用下面概述的第二种方法有什么缺点吗?或者它们实际上是相同的。(我偏爱方法2,因为我处理一些复杂的变量条件,发现从一行到下一行跟踪变量更容易,但担心这可能是糟糕的编码实践(

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

似乎有一些拼写错误,但如果您尝试使用dplyr::mutate,在这种情况下,dplyr::case_when会有所帮助。

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

最新更新