R语言中ifelse函数如何正确实现双条件判断逻辑
错误原因
原代码存在ifelse语法错误:
- 内层
ifelse缺少第三个参数(判断不成立时的返回值),且括号提前闭合 - 外层
ifelse的第三个参数0被写到了函数括号外,不符合R函数传参规则ifelse的标准语法为ifelse(判断条件, 条件为真时的返回值, 条件为假时的返回值),三个参数缺一不可。
修正方案
写法1:修正括号位置的嵌套写法
和原本的逻辑写法一致,仅调整括号位置、补全参数:
d$measure_status = ifelse( d$gender == 2 & d$measure < 15, 1, ifelse( d$gender == 1 & d$measure < 23, 1, 0 ) )
写法2:更简洁的逻辑运算写法
两个判定规则只要满足任意一个就赋值1,否则为0,可以直接用逻辑或运算,逻辑值转整数后刚好对应1/0,不需要嵌套:
d$measure_status = as.integer( (d$gender == 1 & d$measure < 23) | (d$gender == 2 & d$measure < 15) )
示例数据运行结果
对提供的测试数据运行后,measure_status列计算结果如下:
| gender | measure | measure_status |
|---|---|---|
| 2 | 14 | 1 |
| 2 | 17 | 0 |
| 1 | 25 | 0 |
| 1 | 26 | 0 |
内容的提问来源于stack exchange,提问作者Lisa
相关产品推荐
相关产品推荐

