You need to enable JavaScript to run this app. R语言dplyr处理联合实验数据:实现受访者-实验-方案嵌套
优惠活动
大模型
产品
解决方案
定价
更多

R语言dplyr处理联合实验数据:实现受访者-实验-方案嵌套

R语言dplyr生态实现嵌套实验结构数据转换

实现思路

你需要的是典型的宽表转长表操作,使用dplyr配套的tidyr包pivot_longer()函数即可快速完成,无需手动逐列合并变量。

依赖包

首先加载所需工具包:

# 二选一即可,tidyverse包含dplyr和tidyr
library(tidyverse)
# 或者单独加载
library(dplyr)
library(tidyr)

原始数据构建

你提供的示例原始数据可正确构建为:

# 原始数据集
ID <- c(1, 1, 1, 2, 2, 2) 
`Ex ID` <- c(1, 2, 3, 1, 2, 3) 
v1a <- c(2, 4, 5, 1, 3, 5) 
v2a <- c(3, 4, 5, 2, 1, 5) 
v3a <- c(5, 4, 3, 3, 2, 1) 
v1b <- c(4, 5, 5, 1, 5, 4) 
v2b <- c(5, 2, 2, 4, 1, 4) 
v3b <- c(5, 5, 4, 5, 4, 5)
original <- data.frame(ID, `Ex ID`, v1a, v2a, v3a, v1b, v2b, v3b)

核心转换代码

desired <- original %>%
  pivot_longer(
    # 选择所有带a/b后缀的变量列,也可以用-c(ID, `Ex ID`)排除非变量列
    cols = starts_with("v"),
    # 第一部分提取为变量名,第二部分提取为方案标识列
    names_to = c(".value", "profile"),
    # 正则匹配拆分列名:前半部分是v加数字,后半部分是a/b
    names_pattern = "(v\\d+)([ab])"
  )

结果说明

转换后的数据自动满足要求:

  • 新增profile列标记方案a/b
  • 原v1a/v1b自动合并为v1列,v2a/v2b合并为v2列,以此类推
  • 保留原ID和Ex ID的嵌套对应关系

如果你的变量命名规则不是v+数字,只需调整names_pattern的正则即可,比如所有后缀为a/b的变量,可把正则改为(.+)([ab])适配所有命名场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 19:48:00