如何为R数据框Chr分组添加重复3次的序列?处理非3倍数组长度
按分组生成重复3次的序列列(处理非3倍数长度分组)
需求是给数据框按Chr分组,新增一列rep,每个分组内生成1,1,1,2,2,2,...的序列,直到分组末尾。当分组长度无法被3整除时,最后一段的数字会重复剩余行数的次数(比如长度为5的分组,最后一段2会重复2次;长度为1的分组则只出现1次1)。
实现代码
用dplyr的分组操作可以简洁完成:
library(dplyr) original <- data.frame(Chr=c("chr1","chr1","chr1","chr1","chr1","chr2","chr2","chr2","chr2","chr2","chr3"), value=c(1,3,1,3,5,6,3,1,3,5,0), seq=c(1,2,3,4,5,1,2,3,4,5,6)) modified <- original %>% group_by(Chr) %>% mutate(rep = ceiling(row_number() / 3)) %>% ungroup() # 查看结果 modified
逻辑说明
group_by(Chr):按Chr字段分组处理row_number():每个分组内生成从1开始的行号ceiling(row_number() / 3):行号除以3后取向上取整,这样每3行对应同一个递增数字:- 第1-3行:
ceiling(1/3)到ceiling(3/3)→ 1 - 第4-6行:
ceiling(4/3)到ceiling(6/3)→ 2 - 若分组剩余行数不足3(比如第5行):
ceiling(5/3)→ 2,自然形成重复2次的结果
- 第1-3行:
运行后得到的modified数据框和你提供的示例完全一致。
内容的提问来源于stack exchange,提问作者user2300940
相关产品推荐
相关产品推荐

