R语言如何根据已有向量的取值条件创建同长度新向量
R语言按元素条件生成等长向量的实现方案
你要实现的按向量元素值判断、生成等长新向量的需求,直接用R原生的向量化操作就能完成,不需要写循环逐元素处理,两种常用写法如下:
方法1:用ifelse()函数(最简洁)
ifelse()是R内置的向量化条件判断函数,返回结果长度和输入的判断条件长度完全一致,刚好匹配你的需求。
完整代码:
# 定义原始向量 x1 <- c(1,2,2,2,2,2,3,3,3,4,4,4,4,4,4,4,4,4,4) # 按规则生成新向量 new_vec <- ifelse(x1 < 3, "A", "B")
运行后new_vec的输出和你给出的预期结果完全一致:
> new_vec [1] "A" "A" "A" "A" "A" "A" "B" "B" "B" "B" "B" "B" "B" "B" "B" "B" "B" "B" "B"
方法2:逻辑索引分步赋值
如果习惯分步操作,也可以先创建等长的占位向量,再通过逻辑下标按位置赋值:
# 先创建和x1长度相同的字符型占位向量 new_vec <- character(length(x1)) # 给符合x1<3的位置赋值"A" new_vec[x1 < 3] <- "A" # 给剩余位置赋值"B" new_vec[x1 >= 3] <- "B"
这种写法得到的结果和方法1完全相同,两种方式效率没有本质差异,按个人编码习惯选择即可。
注意:不要用基础的
if()函数做判断,if()只接受单值逻辑输入,直接传入整段向量会触发警告,也得不到你要的等长结果。
内容的提问来源于stack exchange,提问作者locket
相关产品推荐
相关产品推荐

