如何在R数据框中基于commute分割ID列生成新分组ID列?
R dataframe分组标记cluster观测组解决方案
针对你的需求——将同一track_ID下被commute分隔的连续cluster观测标记为带子序号的唯一ID,以下是可行的实现方案:
核心思路
- 按
track_ID分组,识别每个cluster组的起始行(即当前行是cluster且前一行是commute,或是组内第一行且为cluster) - 对每个分组内的
cluster行,累加起始行标记得到组内子序号 - 将原
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
相关产品推荐
相关产品推荐

