使用dplyr的if_else多条件赋值报错:无法组合数值与字符类型
问题原因及解决方法
错误核心是**dplyr::if_else要求所有分支的返回值类型必须完全一致**。你的代码里,满足条件时返回的是数字类型的1和2,不满足任何条件时返回的是字符串类型的"",这两种类型无法被合并到同一列中,所以触发了类型不兼容的错误。
解决方法
方法一:替换为空值(推荐,符合数据规范)
将字符串空值换成数字类型的NA,确保和前两个分支的类型匹配:adae <- adae %>% mutate(AREPIOD = if_else((AESTDTC >= AP01SDT) & (AESTDTC <= AP01EDT), 1, if_else((AESTDTC >= AP02SDT) & (AESTDTC <= AP02EDT), 2, NA_real_)))方法二:统一返回字符串类型
如果业务需要字符串格式的标识,把数字转成字符串:adae <- adae %>% mutate(AREPIOD = if_else((AESTDTC >= AP01SDT) & (AESTDTC <= AP01EDT), "1", if_else((AESTDTC >= AP02SDT) & (AESTDTC <= AP02EDT), "2", "")))方法三:用
case_when简化多条件逻辑
多条件判断时,case_when比嵌套if_else更易读,同样要保证返回类型一致:adae <- adae %>% mutate(AREPIOD = case_when( (AESTDTC >= AP01SDT) & (AESTDTC <= AP01EDT) ~ 1, (AESTDTC >= AP02SDT) & (AESTDTC <= AP02EDT) ~ 2, TRUE ~ NA_real_ ))
内容的提问来源于stack exchange,提问作者OS_name
相关产品推荐
相关产品推荐

