如何让R语言ifelse语句返回方法名而非对应数值?
解决方案
要返回对应数值的方法名,核心是把方法名和它们的数值绑定在一起,再通过数值找到对应的名称。这里有两种实现方式:
方式一:使用命名向量(推荐,更易维护)
先把方法和对应值整理成命名向量,这样可以直接通过数值关联到方法名:
# 定义变量 Patient_Being_Tested_Disease = 0 # 将方法名和值绑定为命名向量 methods <- c(Method_1 = 0.1, Method_4 = 0.4, Method_5 = 0.5) # 按条件获取对应方法名 winner <- ifelse(Patient_Being_Tested_Disease == 0, names(methods)[which.min(methods)], # 取最小值对应的方法名 names(methods)[which.max(methods)]) # 取最大值对应的方法名 # 输出结果 winner # [1] "Method_1"
方式二:不修改原有变量定义
如果不想调整原有变量的定义方式,可以临时构建方法名和数值的向量来匹配:
# 原有变量定义 Patient_Being_Tested_Disease = 0 Method_1 = 0.1 Method_4 = 0.4 Method_5 = 0.5 # 按条件获取对应方法名 winner <- ifelse(Patient_Being_Tested_Disease == 0, c("Method_1", "Method_4", "Method_5")[which.min(c(Method_1, Method_4, Method_5))], c("Method_1", "Method_4", "Method_5")[which.max(c(Method_1, Method_4, Method_5))]) # 输出结果 winner # [1] "Method_1"
原理说明
which.min()/which.max()会返回向量中最小/最大值的位置索引- 用
names()(或直接构建的方法名向量)通过索引取出对应的方法名
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

