R语言实现三个等长向量满足条件时同步移除对应位置元素
R语言同步筛选多个等长向量的实现方案
初始向量定义如下:
# 初始化三个等长向量 x <- c(3, 6, 12, 24, 23) y <- c(34, 26, 33, 41, 54) z <- c("A", "B", "C", "D", "E")
具体需求:
- 移除x和/或y中数值小于10的元素
- 同步移除z中与被删元素位置对应的取值
- 最终输出需匹配如下结果:
> x [1] 12 24 23 > z [1] "C" "D" "E" > y [1] 33 41 54
实现代码
核心思路:三个向量初始长度一致、元素位置一一对应,因此先生成统一的保留位置逻辑索引,再用该索引同时筛选三个向量即可,不会出现位置错位问题。
# 定义保留规则:x和y对应位置的数值均≥10时,保留该位置 keep_pos <- x >= 10 & y >= 10 # 用同一索引同步更新三个向量 x <- x[keep_pos] y <- y[keep_pos] z <- z[keep_pos]
规则调整说明
如果后续筛选规则变更,直接修改keep_pos的判断逻辑即可:
- 若要求「x或y任意一个小于10就删除对应位置」,将判断符
&(逻辑且)替换为|(逻辑或) - 若只需要判断x的数值、不限制y的取值,直接写
keep_pos <- x >=10即可
运行代码后打印三个向量,就能得到预期结果。
内容的提问来源于stack exchange,提问作者Hazem
相关产品推荐
相关产品推荐

