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

如何基于指定前缀对data.frame列排序,使S1/S5开头列前置

实现方法

核心逻辑为通过列名匹配筛选优先级列,仅调整列索引不修改底层数据,面对你提到的5.3万列、1.2万行的规模也可以秒级完成:

方法1:Base R实现(无需额外安装包)

# 提取全部列名
col_all <- colnames(df)
# 筛选优先级列:保留Names列 + 匹配S1/S5开头的列
# 正则中加下划线是避免误匹配S10、S51这类列,如果不需要严格区分可以去掉_
col_priority <- c("Names", grep("^S(1|5)_", col_all, value = TRUE))
# 筛选剩余列,保留原有排序
col_others <- setdiff(col_all, col_priority)
# 重排data.frame
df_sorted <- df[, c(col_priority, col_others)]

方法2:tidyverse实现(语法更简洁)

library(dplyr)
df_sorted <- df %>%
  # 先放Names列,再放S1_/S5_开头的列,剩下的列按原顺序排在最后
  select(Names, starts_with(c("S1_", "S5_")), everything())

如果不需要严格匹配S1后接下划线的格式,直接把starts_with的参数改成c("S1", "S5")即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 22:09:02