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

R语言使用rle与dplyr查找布尔向量连续TRUE末尾位置异常问题

问题原因

你当前代码的核心错误是:last()返回的是符合要求的游程的长度值,而非该游程在rle返回结果中的位置索引,用长度值去索引cumsum(rle(is_reaching)$lengths)的结果,自然无法得到正确的末尾位置。

正确实现代码

基础R版本

# 存储rle结果,避免重复计算
rle_res <- rle(is_reaching)
# 筛选同时满足「值为TRUE」「长度大于40」的游程索引
valid_run_idx <- which(rle_res$values == TRUE & rle_res$lengths > 40)
# 取最后一个符合要求的游程的索引
last_run_idx <- tail(valid_run_idx, 1)
# 计算该游程的末尾索引
transport_phase_end <- cumsum(rle_res$lengths)[last_run_idx]

如果不存在符合条件的游程,你可以自行补充逻辑处理NA的情况。

dplyr分组适配版本

如果是在分组数据框中计算,可直接用mutate配合自定义逻辑实现:

library(dplyr)

df <- df %>%
  group_by(你的分组列名) %>%
  mutate(transport_phase_end = {
    rle_res <- rle(is_reaching)
    valid_run_idx <- which(rle_res$values == TRUE & rle_res$lengths > 40)
    # 无符合条件的游程时返回NA,避免报错
    if(length(valid_run_idx) == 0) {
      NA_integer_
    } else {
      cumsum(rle_res$lengths)[tail(valid_run_idx, 1)]
    }
  }) %>%
  ungroup()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 14:36:05