使用dplyr::if_else在R中将小于0的值转NA报错,如何修正?
解决dplyr::if_else类型不匹配报错的方法
报错原因很明确:dplyr的if_else对分支的类型一致性要求严格,你代码里的NA默认是逻辑型(logical)向量,而你的x列是数值型(double),两个分支类型不匹配,所以触发了false must be a logical vector, not a double vector的错误。
下面是几种可行的解决办法:
显式使用数值型NA(
NA_real_)匹配x的类型:data %>% mutate(x = if_else(x < 0, NA_real_, x))NA_real_是R中专门用于数值型向量的NA值,和你的x列类型一致,能满足if_else的严格类型检查要求。使用base R的
ifelse(自动做类型转换):data %>% mutate(x = ifelse(x < 0, NA, x))base R的
ifelse会自动处理类型不一致的情况,不过它的行为和dplyr::if_else有差异(比如不会严格检查长度),如果不需要严格类型控制可以用这个。用
dplyr::case_when实现相同逻辑:data %>% mutate(x = case_when(x < 0 ~ NA_real_, TRUE ~ x))case_when同样要求分支返回值类型一致,所以这里也要用NA_real_,适合需要多条件判断的场景。
内容的提问来源于stack exchange,提问作者cory
相关产品推荐
相关产品推荐

