首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用mutate()和ifelse()

使用mutate()和ifelse()
EN

Stack Overflow用户
提问于 2021-12-09 04:22:23
回答 1查看 71关注 0票数 1

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

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2021-12-09 04:26:38

似乎有一些错误,但如果您尝试使用dplyr::mutate,在本例中,dplyr::case_when将有所帮助。

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70284686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档