含多组(x,y)对的R数据框/data.table转换为指定长格式的高效实现
data.table 实现方案
此方案为原生向量化操作,处理4万行级数据仅需毫秒级耗时,远快于手动循环实现,且支持自动适配3-5组坐标对、多常量列的场景。
示例代码
# 加载依赖包 library(data.table) # 构造演示数据,实际可直接用fread读取或把现有数据框转成data.table格式 dt <- data.table( x_1 = 1:5, y_1 = 6:10, x_2 = 11:15, y_2 = 16:20, x_3 = 21:25, y_3=26:30, alpha = seq(0.2,1,0.2) ) # 核心转换逻辑 res_dt <- melt( dt, # 按列名正则匹配分组,x开头的列归为x组,y开头的列归为y组 measure.vars = measure(value.name = c("x", "y"), pattern = c("^x_", "^y_")), # 坐标对序号输出到index列 variable.name = "index" ) # 可选:调整列顺序和要求的输出格式完全对齐 setcolorder(res_dt, c("x", "y", "alpha", "index"))
特性说明
- 无需手动指定坐标列数量,3-5组坐标对自动适配,新增
x_4、y_4等列无需修改代码 - 所有非坐标列(如alpha、其他同类常量列)会自动保留,按原行对应重复到每一条坐标记录
- 输出
index列的值和原坐标对后缀完全对应,无需额外计算
内容的提问来源于stack exchange,提问作者lemmykc
相关产品推荐
相关产品推荐

