dplyr中if_else报错‘false must be a vector’的解决方法咨询
问题解决:if_else报错处理
你遇到的错误是因为dplyr::if_else对分支返回值有严格要求——真假分支必须是同类型的向量,而NULL不属于向量类型,和name(字符型向量)不匹配,所以触发报错。
解决方法很直接:把NULL换成字符型缺失值NA_character_(如果是数值型场景就用NA_real_,这里name是字符类型,所以用前者),保证两个分支的类型完全一致。
修改后的完整代码如下:
library(tidyverse) table_base <- data.frame(cat=c("a","b","c","d")) table_a <- data.frame(cat=c("a","b"), value=c(1,2)) table_b <- data.frame(cat=c("a","c","d"), value=c(7,9,10)) final_0 <- reduce(list(table_base,table_a,table_b),left_join,by='cat') %>% mutate(amount = dplyr::coalesce(!!!select(.,contains("value")))) final_0 %>% pivot_longer(-c('cat','amount')) %>% mutate(value_from=if_else(amount==value, name, NA_character_))
运行这段代码后,value_from列会在amount和value相等时填充对应的name,不相等时显示字符型缺失值NA,完全符合预期逻辑。
内容的提问来源于stack exchange,提问作者anderwyang
相关产品推荐
相关产品推荐

