如何使用rep函数生成特定重复模式的ID列并得到54000行结果?
我来帮你搞定这个R语言的序列生成问题!
先理清你的需求与问题根源
你需要的是分组递增重复的序列:先有一批数字各重复n次,下一批数字各重复n+1次,以此类推;同时最终总长度要达到54000行。你之前尝试的代码因为重复次数的参数设置偏差,没得到想要的结果——比如rep.int(1:9, rep(1:3, each = 3))生成的是1-3各重复1次、4-6各重复2次,和你要的前三个数重复2次的需求不符。
再看你提到的test2代码:
test2<- rep.int(1:10e3, rep(1:10, each = 1e3))
它的逻辑是:重复次数从1到10,每个重复次数对应1000个数字(前1000个数字各重复1次,接下来1000个各重复2次…最后1000个各重复10次),总长度是1000*(1+2+…+10) = 55000,这就是为什么它是55000行。
满足54000行需求的解决方案
你需要的54000行,刚好是把重复次数的起始从1改成2,也就是重复次数从2到10,每个重复次数对应1000个数字:
- 总长度计算:
1000*(2+3+…+10) = 1000*54 = 54000,完全符合要求!
对应的代码如下:
test <- rep.int(1:(9*1e3), rep(2:10, each = 1e3))
参数解释:
1:(9*1e3):生成1到9000的数字(因为重复次数从2到10共9个档位,每个档位对应1000个数字)rep(2:10, each=1e3):生成重复次数序列——2重复1000次,3重复1000次…10重复1000次。这样前1000个数字(1-1000)每个重复2次,接下来1000个(1001-2000)每个重复3次,直到最后1000个(8001-9000)每个重复10次。
匹配你最初示例的小范围验证
如果你想先验证小范围的序列(比如1-9的目标模式),可以用这段代码:
demo <- rep.int(1:9, rep(2:4, each=3)) # 输出结果:1 1 2 2 3 3 4 4 4 5 5 5 6 6 6 7 7 7 7 8 8 8 8 9 9 9 9
这里rep(2:4, each=3)生成的是c(2,2,2,3,3,3,4,4,4),刚好让1-3各重复2次、4-6各重复3次、7-9各重复4次,完美匹配你给出的示例序列。
内容的提问来源于stack exchange,提问作者hugh_man
相关产品推荐
相关产品推荐

