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

在R语言中将连续TRUE值的行合并为单行的实现方法

R语言实现连续TRUE值合并分组

原始数据

首先定义初始数据框:

df <- data.frame(ID = c(1, 2, 3, 4, 5, 6, 7),
                 Value = c(FALSE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE))

第一步:生成连续值分组

给连续的TRUE段分配唯一分组号,FALSE统一归为0组,得到你需要的中间结果:

library(dplyr)

df_with_group <- df %>%
  mutate(
    # 标记每个连续TRUE段的起始行
    is_start = Value & (lag(Value, default = FALSE) == FALSE),
    # 为TRUE段分配递增分组号,FALSE设为0
    Group = ifelse(Value, cumsum(is_start), 0)
  )

运行后得到的中间数据框:

IDValueGroup
1FALSE0
2TRUE1
3TRUE1
4FALSE0
5TRUE2
6TRUE2
7TRUE2

第二步:聚合得到目标数据框

基于分组结果,将连续TRUE的ID合并为区间字符串,FALSE保留单个ID:

df_result <- df_with_group %>%
  group_by(Group, Value) %>%
  summarize(
    ID = ifelse(Value, 
                paste0("(", min(ID), ", ", max(ID), ")"), 
                as.character(min(ID))),
    # 用每组最小ID作为排序依据,保证结果顺序和原始数据一致
    sort_key = min(ID),
    .groups = "drop"
  ) %>%
  arrange(sort_key) %>%
  select(-sort_key) # 删除辅助排序列

最终结果

运行后得到的目标数据框:

IDValue
1FALSE
(2, 3)TRUE
4FALSE
(5, 7)TRUE

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 21:53:23