【问题标题】:Case when situation in RR中的情况
【发布时间】:2021-06-03 15:48:17
【问题描述】:

这是示例数据集和我知道如何执行的第一个命令。我希望命令中未列出的所有其他内容都是 areatype 04。我知道我可以在这个简单的示例中列出这三个。然而,实际上我有 35 种其他可能性需要编码为 areatype 04。我可以在最后一行代码中添加一些内容,即“如果这是 07,但如果还有其他情况,那么 04”

  area <- c("000995","000996","000001","000005","000998","000007")
  areatype<- c("","","","","","")

  list <- data.frame(county,areatype)

  list <- list %>% mutate(areatype=case_when(area=='000995'~'07',area=='000996'~'07')

【问题讨论】:

    标签: r dplyr case-when


    【解决方案1】:

    在基础 R 中,您也可以使用 ifelse

    list$areatype <- ifelse(list$area %in% c("000995", "000996"), "07", "04")
    

    或者,如果您有很多带有连续后缀的 area 值,您可以执行以下操作:

    match <- grepl(paste(do.call(sprintf, list("%i$", 995:996)), collapse = "|"), list$area)
    list$areatype <- ifelse(match, "07", "04")
    

    对于list$area 中以995996FALSE 结尾的任何元素,第一行将返回TRUE

    【讨论】:

      【解决方案2】:

      我们可以使用%in%并将TRUE指定为else选项,即如果我们不指定TRUE,默认情况下它将被NA替换

      library(dplyr)
      list %>% 
         mutate(areatype = case_when(county %in% c('000995', '000996')~'07', 
                TRUE ~ '04'))
      

      注意:list 是一个函数名,即避免用函数名命名对象

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-29
        • 2017-01-03
        • 1970-01-01
        • 1970-01-01
        • 2014-05-05
        • 2017-09-08
        相关资源
        最近更新 更多