【问题标题】:case_when or ifelse for building a new varaiblecase_when 或 if else 用于构建新变量
【发布时间】:2020-12-01 20:28:51
【问题描述】:

我想在某些条件下构建一个新变量。我的代码如下所示:

df%>% mutate (PassFL= case_when(ID %in% PassID$ID~"Y",
                                ID !%in% PassID$ID~"N")

它不会运行。我认为!%in% 不正确。我应该如何纠正它。

另外,我很难关注ifelse。经常忘记) 或迷路。谁能提供一些关于如何关注ifelse 的提示?使用case_when有什么缺点吗?

【问题讨论】:

    标签: r if-statement


    【解决方案1】:

    !%in% 不起作用,它将是 !ID %in%

    library(dplyr)
    df%>% 
         mutate (PassFL= case_when(ID %in% PassID$ID~"Y",
                                !ID %in% PassID$ID~"N"))
    

    或者如果只有两个值需要考虑,可以在一个上创建表达式,并将默认值指定为下一个 (TRUE ~)

    df %>%
       mutate(PassFL = case_when(ID %in% PassID$ID ~ "Y", TRUE ~ "N"))
    

    或者不使用ifelsecase_when,可以将逻辑索引转换为数字索引(TRUE -> 1和FALSE ->0,所以我们添加1作为R索引从1开始)并使用它来替换在 vector 中传递的值

    df %>%
       mutate(PassFL = c("N", "Y")[1 + (ID %in% PassID$ID)])
    

    【讨论】:

    • 对于case_when,我们可以说mutate (PassFL= case_when(ID %in% PassID$ID~"Y", "N") 吗?
    • 您可以指定TRUE ~ "N",这是默认值。如果未指定,默认为NA
    • 你的意思是mutate (PassFL= case_when(ID %in% PassID$ID~"Y", FALSE ~"N"
    • @Stataq 不,我的意思是 TRUE ~ "N" 更新了帖子
    • 如果是默认选项,那就是mutate (Grade= case_when(Grade>8 ~"A", Grade <5 ~"C", TRUE ~ "B")
    猜你喜欢
    • 2020-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-16
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多