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

如何重排DataFrame使各测试的pre与post列相邻?

调整随访数据集列顺序:将每个测试的pre/post列相邻排列

模拟原始数据(对应TABLE 1结构)

假设你的数据集列结构如下(以3项测试为例,20项测试逻辑完全一致):

set.seed(123)
df <- tibble(
  ID = 1:5,
  TestA_pre = rnorm(5),
  TestB_pre = rnorm(5),
  TestC_pre = rnorm(5),
  TestA_post = rnorm(5),
  TestB_post = rnorm(5),
  TestC_post = rnorm(5)
)

方法1:使用tidyverse工具包(推荐)

通过提取测试名称、构建目标列顺序来重排列:

library(tidyverse)

# 提取所有测试名称(去掉_pre/_post后缀)
test_names <- unique(str_remove(names(df)[-1], "_pre|_post"))

# 生成目标列顺序:ID + 每个测试的pre列→post列
target_cols <- c("ID", unlist(map(test_names, ~c(paste0(.x, "_pre"), paste0(.x, "_post")))))

# 重排列得到TABLE 2结构
df_reordered <- df %>% select(all_of(target_cols))

方法2:Base R实现(无需额外包)

如果不想加载第三方工具包,用基础R代码也能完成:

# 提取测试名称
test_names <- unique(sub("_pre|_post", "", names(df)[-1]))

# 构建目标列顺序
target_cols <- c("ID", as.vector(outer(test_names, c("_pre", "_post"), paste0)))

# 重排列
df_reordered_base <- df[, target_cols]

核心逻辑说明

两种方法的思路完全一致:

  1. 从现有列名中提取所有测试的基础名称(如TestA、TestB)
  2. 按照「测试名_pre → 测试名_post」的固定顺序,生成目标列名向量
  3. 根据该向量重新排列数据集的列

这种方法完全规避了Excel手动操作的出错风险,且可以无缝适配你提到的20项测试场景。

内容的提问来源于stack exchange,提问作者amir.fathi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 06:10:07