You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何重排DataFrame:固定首列,将剩余列后半部分穿插排列

重排DataFrame列:固定首列+交替排列两类列

解决方案思路

  • 保留首列N始终在第一位
  • 将剩余列按前缀l_和s_拆分两组(两类列数量始终相等)
  • 对两组列按后缀数字排序,保证l_x_n与s_x_n一一对应
  • 交替合并两组列,最终拼接首列得到目标列顺序

代码实现

首先加载tibble包并构建示例数据:

library(tibble)

# 示例DataFrame(支持任意数量的l_/s_列,只要两类数量相等)
df <- tibble(
  N = "AB",
  l_x_1 = 1, l_x_2 = 2, l_x_3 = 3,
  s_x_1 = 1, s_x_2 = 2, s_x_3 = 3
)

执行列重排逻辑:

# 提取所有列名
col_names <- colnames(df)

# 分离固定首列和剩余列
first_col <- col_names[1]
remaining_cols <- col_names[-1]

# 拆分l_和s_前缀的列组
l_cols <- remaining_cols[grepl("^l_", remaining_cols)]
s_cols <- remaining_cols[grepl("^s_", remaining_cols)]

# 按列名后缀的数字排序,确保顺序匹配
l_cols <- l_cols[order(as.integer(sub("l_x_", "", l_cols)))]
s_cols <- s_cols[order(as.integer(sub("s_x_", "", s_cols)))]

# 交替合并两组列(l_x_1, s_x_1, l_x_2, s_x_2...)
alternated_cols <- as.vector(rbind(l_cols, s_cols))

# 生成最终列顺序并重排DataFrame
final_col_order <- c(first_col, alternated_cols)
df_reordered <- df[, final_col_order]

# 查看结果
df_reordered

关键说明

  • grepl("^l_", remaining_cols):精准匹配以l_开头的列,同理处理s_列
  • sub("l_x_", "", l_cols):提取列名中的数字部分,转成整数后排序,避免列名乱序导致的匹配错误
  • rbind(l_cols, s_cols) + as.vector():将两组列按行绑定后转成向量,自动实现交替排列的效果

这个方案支持任意数量的l_和s_列,只要两类列的数量保持相等即可。

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 00:15:44