You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在逻辑向量中定位从FALSE到TRUE的切换索引(一行代码实现)

一行代码找出逻辑向量中从FALSE切换到TRUE的位置索引

嘿,这个需求用基础R就能轻松实现,给你两种简洁的一行代码方案,都能完美解决问题:

方法一:利用差分(diff)函数

这是最常用的思路,核心是通过差分捕捉“从0到1”的切换:

# 先定义一个示例逻辑向量
vec <- c(FALSE, FALSE, TRUE, TRUE, FALSE, TRUE, FALSE)

# 一行代码得到切换位置
which(diff(vec) == 1) + 1

原理解释:

逻辑向量在参与数值运算时会自动转为整数(FALSE=0,TRUE=1),diff(vec)会计算相邻元素的差值(后项减前项)。当从FALSE切换到TRUE时,差值正好是1。我们用which()找出这些差值为1的索引,但注意diff的结果比原向量短一位,所以要给结果加1,才能对应原向量中切换发生的位置。

运行上面的代码会得到[1] 3 6,正好对应示例向量中第3和第6个元素(从FALSE切换到TRUE的位置)。

方法二:直接对比前后元素

如果觉得差分不够直观,也可以直接对比每个元素和它的前一个元素:

which(vec & !c(FALSE, vec[-length(vec)]))

原理解释:

c(FALSE, vec[-length(vec)])生成了一个和原向量长度相同的向量,每个位置对应原向量的前一个元素(第一个位置补FALSE,因为它没有前项)。然后我们筛选出“当前元素是TRUE且前一个元素是FALSE”的位置,就是我们要找的切换点。运行结果和方法一完全一致。

这两种方法都是纯基础R实现,不需要额外包,而且都是一行代码就能搞定~

内容的提问来源于stack exchange,提问作者pepece

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:23:08