在R中为同一Batch_No下相同Submission_Id分配相同序列号
在R语言中按批次分组为相同提交ID分配序号
问题需求
需要针对同一Batch_No分组内的相同Submission_Id,分配连续且一致的序号,示例数据与期望结果如下:
示例数据
Submission_Id <- c(619295,619295,619295,619295,619296,619296,619296,619296,619296,556921,556921,559254,647327,647327,647327,646040,646040,646040,646040,646040,64604) Batch_No <- c(633,633,633,633,633,633,633,633,633,633,633,633,634,634,634,650,650,650,650,650,650)
期望结果
Sl.No <- c(1,1,1,1,2,2,2,2,2,3,3,4,1,1,1,1,1,1,1,1,1)
解决方案
以下提供两种常用实现方式:
方法1:使用dplyr包(推荐,代码更直观)
先确保安装并加载dplyr包,然后按批次分组,对组内的提交ID按出现顺序分配序号:
# 安装包(首次使用需执行) # install.packages("dplyr") library(dplyr) # 合并为数据框 df <- data.frame(Submission_Id, Batch_No) # 生成序号 df <- df %>% group_by(Batch_No) %>% mutate(Sl.No = as.integer(factor(Submission_Id, levels = unique(Submission_Id)))) %>% ungroup() # 查看结果 print(df$Sl.No)
方法2:使用Base R(无需额外包)
利用ave()函数实现分组内的序号分配:
# 合并为数据框 df <- data.frame(Submission_Id, Batch_No) # 生成序号 df$Sl.No <- ave(df$Submission_Id, df$Batch_No, FUN = function(x) { as.integer(factor(x, levels = unique(x))) }) # 查看结果 print(df$Sl.No)
两种方法运行后,生成的Sl.No列均与期望结果一致。
内容的提问来源于stack exchange,提问作者Roshan
相关产品推荐
相关产品推荐

