R语言如何基于布尔向量条件从两个向量对应位置取值?
R语言向量化条件选择向量实现方案
1. 基础包内置ifelse函数(最常用,无需额外安装包)
这是R原生自带的向量化条件判断函数,完全匹配你的需求,语法如下:
v <- ifelse(test = b, yes = v_1, no = v_2)
- 第一个参数
test传入布尔向量b - 对应位置为
TRUE时返回yes参数v_1的对应值 - 对应位置为
FALSE时返回no参数v_2的对应值
示例运行效果:
v_1 <- c(1, 3, 5, 7) v_2 <- c(2, 4, 6, 8) b <- c(TRUE, FALSE, FALSE, TRUE) v <- ifelse(b, v_1, v_2) # 输出v的结果:1 4 6 7
2. dplyr包if_else函数(性能更高、类型更安全)
如果你使用tidyverse技术栈,推荐使用dplyr::if_else,它相比基础包ifelse做了性能优化,同时会严格校验两个返回值的类型,避免隐式类型转换引发的隐蔽bug:
library(dplyr) v <- if_else(condition = b, true = v_1, false = v_2)
3. 布尔索引直接赋值(无函数调用开销,性能最优)
你也可以直接通过布尔向量索引赋值实现,全程为向量化操作,没有函数调用开销,处理超大规模向量时速度最快:
v <- v_2 v[b] <- v_1[b]
内容的提问来源于stack exchange,提问作者Manofbear
相关产品推荐
相关产品推荐

