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

如何在R数据框中基于commute分割ID列生成新分组ID列?

R dataframe分组标记cluster观测组解决方案

针对你的需求——将同一track_ID下被commute分隔的连续cluster观测标记为带子序号的唯一ID,以下是可行的实现方案:

核心思路

  1. 按track_ID分组,识别每个cluster组的起始行(即当前行是cluster且前一行是commute,或是组内第一行且为cluster)
  2. 对每个分组内的cluster行,累加起始行标记得到组内子序号
  3. 将原track_ID与子序号拼接,生成新的唯一组ID

代码实现

1. 模拟测试数据(可替换为你的真实数据)

set.seed(123)
library(tibble)
df <- tibble(
  track_ID = rep(c("1", "2"), each = 40),
  activity = c(
    rep("cluster", 15), rep("commute", 2), rep("cluster", 13), rep("commute", 1), rep("cluster", 10),
    rep("cluster", 12), rep("commute", 2), rep("cluster", 18), rep("commute", 1), rep("cluster", 7)
  )
)

2. 处理数据生成新列

library(dplyr)

df_processed <- df %>%
  group_by(track_ID) %>%
  # 标记cluster组的起始行
  mutate(
    new_group = ifelse(activity == "cluster", 
                       (row_number() == 1) | lag(activity, default = "commute") == "commute",
                       FALSE)
  ) %>%
  # 生成组内子序号,commute行设为NA
  mutate(
    sub_id = ifelse(activity == "cluster", cumsum(new_group), NA_integer_)
  ) %>%
  # 拼接生成唯一组ID
  mutate(
    cluster_group_id = ifelse(activity == "cluster", 
                             paste0(track_ID, ".", sub_id),
                             NA_character_)
  ) %>%
  ungroup() %>%
  # 按需移除中间辅助列
  select(-new_group, -sub_id)

代码说明

  • new_group:精准标记每个连续cluster组的第一行,确保被commute分隔的组被正确区分
  • sub_id:对每个分组内的cluster行累加起始标记,得到从1开始的组序号
  • cluster_group_id:将原track_ID与子序号拼接成类似1.1、1.2的格式,commute行标记为NA(若需调整commute行的标记,可修改ifelse的分支逻辑)

内容的提问来源于stack exchange,提问作者Matt-W22

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 23:17:27