R语言实现调整后group_by逻辑并生成分组列的方法咨询
R语言实现同姓名分任职段分组方案
你需要的分组逻辑本质是识别连续出现的同姓名序列块,无需额外安装扩展包,用dplyr自带函数即可实现,也可以用data.table的内置函数快速完成。
dplyr实现方法
核心思路是用lag()对比相邻行的姓名,再通过cumsum()累加触发新分组的标记生成任职段编号:
library(dplyr) df <- tibble( name = c("Jose","Jose", "Maria","Maria","Jose","Jose","Jose") ) adjusted_df <- df %>% # 一行代码生成分组编号 mutate(number = cumsum(name != lag(name, default = first(name))) + 1)
运行后得到的adjusted_df完全匹配你给出的期望输出,后续直接用group_by(name, number)即可按不同任职段分组聚合。
注意:运行前需要确保你的数据集已按任职时间升序排序,否则连续块的识别会出错。
更简洁的data.table实现
如果常用data.table,可以直接用内置的rleid()函数,专门用于生成连续序列的分组ID:
library(data.table) # 转换为data.table对象 setDT(df) # 直接生成分组编号 df[, number := rleid(name)]
内容的提问来源于stack exchange,提问作者fabiominatto
相关产品推荐
相关产品推荐

