R语言如何将连续同属性数据点(簇)标记为不同分组
R语言实现连续TRUE值的分组标记
方案1:基础R实现(无需额外加载包)
核心使用游程编码函数rle()识别连续相同值的片段,再对TRUE片段依次编号:
# 构造示例数据 dt <- data.frame(value = c(TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE)) # 计算游程编码 rle_val <- rle(dt$value) # 为TRUE的游程分配编号,FALSE游程对应编号设为NA group_idx <- cumsum(rle_val$values) group_idx[!rle_val$values] <- NA # 映射回原数据生成group列 dt$group <- paste0("G", rep(group_idx, rle_val$lengths))
输出结果:
value group 1 TRUE G1 2 TRUE G1 3 FALSE <NA> 4 FALSE <NA> 5 TRUE G2 6 FALSE <NA> 7 TRUE G3 8 TRUE G3 9 TRUE G3 10 TRUE G3
方案2:dplyr 流式实现
适合已经在使用tidyverse生态的场景,用滞后判断+累计计数实现:
library(dplyr) dt <- dt %>% mutate( # 标记新TRUE分组的起始位置 new_group = value & !lag(value, default = FALSE), # 生成分组列,FALSE对应设为NA group = ifelse(value, paste0("G", cumsum(new_group)), NA_character_) ) %>% select(-new_group)
内容的提问来源于stack exchange,提问作者T X
相关产品推荐
相关产品推荐

