R语言图表审查后添加单个数据点及if_else报错解决方法
解决思路及方法
报错原因
你使用的if_else()是dplyr包提供的严格条件判断函数,要求条件参数、真值返回参数、假值返回参数三者的长度、数据类型完全匹配。你遇到的长度报错,大概率是实际运行环境中Agree、Var1、Var2三个变量的长度不一致,或是变量名拼写错误导致条件返回了长度为0的结果,和长度为5的Var1/Var2不匹配。
可行解决方案
方法1:使用基础R原生ifelse()函数
基础R自带的ifelse()默认支持向量化行级运算,对参数类型的兼容性更高,直接替换你的代码即可:
mydf$true <- ifelse(mydf$Agree == 1, mydf$Var1, mydf$Var2)
运行后即可直接得到你预期的输出结果。
方法2:调整参数后使用dplyr的if_else()
如果你需要用到if_else()的严格类型校验特性,可以先统一Var1、Var2的数据类型,再执行判断:
library(dplyr) mydf <- mydf %>% mutate( # 统一两个变量为数值型 Var1 = as.numeric(Var1), Var2 = as.numeric(Var2), true = if_else(Agree == 1, Var1, Var2) )
方法3:行索引直接赋值
逻辑最直观的方案,完全按行匹配取值,不会出现长度不匹配问题:
# 初始化新列 mydf$true <- NA # 给Agree=1的行赋值Var1的对应值 mydf$true[mydf$Agree == 1] <- mydf$Var1[mydf$Agree == 1] # 给Agree=0的行赋值Var2的对应值 mydf$true[mydf$Agree == 0] <- mydf$Var2[mydf$Agree == 0]
内容的提问来源于stack exchange,提问作者Shnetti
相关产品推荐
相关产品推荐

