R中的情况

R中的情况,r,mutate,case-when,R,Mutate,Case When,这是示例数据集和我知道如何执行的第一个命令。我希望命令中未列出的所有其他内容都是areatype 04。我知道我可以在这个简单的例子中列出这三个。然而,实际上我还有35种可能需要编码为areatype 04。我是否可以在最后一行代码中添加一些东西,比如说如果这是07,但如果还有其他东西,那么是04 area <- c("000995","000996","000001","000005","000

这是示例数据集和我知道如何执行的第一个命令。我希望命令中未列出的所有其他内容都是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')
我们可以在%中使用%并将TRUE指定为else选项,即如果我们不指定TRUE,默认情况下它将被NA替换

注意:列表是一个函数名,即避免使用函数名命名对象。我们可以在%中使用%并将TRUE指定为else选项,也就是说,如果不指定TRUE,默认情况下它将替换为NA


注意:列表是一个函数名,即避免在base R中使用函数名命名对象。您也可以使用ifelse:


其中,对于以995或996结尾的list$area的任何元素,第一行将返回TRUE,否则返回FALSE。

在base R中,您也可以使用ifelse执行此操作:

其中,对于以995或996结尾的list$area的任何元素,第一行将返回TRUE,否则返回FALSE

library(dplyr)
list %>% 
   mutate(areatype = case_when(county %in% c('000995', '000996')~'07', 
          TRUE ~ '04'))
list$areatype <- ifelse(list$area %in% c("000995", "000996"), "07", "04")
match <- grepl(paste(do.call(sprintf, list("%i$", 995:996)), collapse = "|"), list$area)
list$areatype <- ifelse(match, "07", "04")