R语言从零创建含重复字符串数据框的实现方法
问题说明
需要创建符合以下规则的数据框:
- 周期值范围为1-10,按序列循环排布
- 每个周期值总计对应42574条ID记录
- 最终数据框总行数为425740行
目标结构参考:
之前尝试使用如下代码创建:
periodstring <- as.numeric(gl(10, 42574)) periods <- as.data.frame(periodstring)
该代码生成的周期值为连续排序状态(即前42574行全为1,接下来42574行全为2,以此类推),不符合预期,需要更简单的正确实现方式。
实现方案
之前的代码生成连续排序结果,是因为gl()函数的参数设置对应了「每个水平连续重复指定次数再切换下一个水平」的逻辑,要实现循环排布的效果,有两种非常简单的写法:
方法1:使用rep()函数(更直观)
直接设置序列重复次数即可,1-10的序列重复42574次后,每个数字刚好出现42574次,总长度符合要求:
# 生成周期列 periodstring <- rep(1:10, times = 42574) # 组装为数据框 periods <- data.frame(period = periodstring)
可以先跑小规模测试验证逻辑(将数据量缩小,方便查看结果):
# 测试案例:1-10循环3次,每个值出现3次,共30行 test <- data.frame(period = rep(1:10, times = 3)) print(test)
测试输出为1,2,...,10,1,2,...,10,1,2,...,10的循环结构,和需求完全匹配。
方法2:调整gl()函数参数
如果要沿用gl()函数,只需要把单个水平的连续重复长度设为1,指定总长度为目标行数即可:
periodstring <- as.numeric(gl(n = 10, k = 1, length = 425740)) periods <- data.frame(period = periodstring)
两种写法生成的结果完全一致。
内容的提问来源于stack exchange,提问作者magisterludi
相关产品推荐
相关产品推荐

