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

如何按特定命名模式批量将实验宽格式数据集转为长格式?

宽格式实验数据转长格式(自动匹配多属性变量对)

针对你的实验数据转换需求,这里用tidyverse工具链实现自动匹配条件变量对、批量转换长格式的方案,无需手动指定数百个属性:

核心思路

  1. 识别所有以MM7M(条件A)和MMsf7M(条件B)开头的变量
  2. 通过正则表达式拆分变量名,提取条件标识和属性名称
  3. 将条件标识替换为直观的A/B
  4. 把属性名称转成独立列,确保每个被试对应两行数据(分别对应条件A、B)

完整代码

library(tidyverse)

# 示例数据
data <- tibble(
  id = c(1, 2, 3, 4),
  MM7Mabcde = c(2, 4, 2, 2),
  MMsf7Mabcde = c(4, 6, 3, 4),
  MM7Mxyz = c(2, 4, 4, 2),
  MMsf7Mxyz = c(6, 8, 9, 9),
  MM7Mtotal_c = c(6, 5, 4, 1),
  MMsf7Mtotal_c = c(12, 18, 22, 32),
  someVar = c(5, 6, 9, 9)
)

# 执行格式转换
data_long <- data %>%
  # 选中所有目标变量,拆分变量名为条件和属性
  pivot_longer(
    cols = starts_with("MM7M") | starts_with("MMsf7M"),
    names_to = c("condition", "attribute"),
    names_pattern = "(MM7M|MMsf7M)(.*)",
    values_to = "value"
  ) %>%
  # 将条件前缀替换为A/B
  mutate(condition = case_match(condition,
    "MM7M" ~ "A",
    "MMsf7M" ~ "B"
  )) %>%
  # 把属性转为独立列,保留非条件变量
  pivot_wider(
    id_cols = c(id, condition, someVar),
    names_from = attribute,
    values_from = value
  )

# 查看转换结果
print(data_long)

代码说明

  • pivot_longer的names_pattern用正则捕获组,自动拆分变量名的前缀(条件)和后缀(属性),无需手动枚举属性
  • case_match将原始前缀映射为更易读的A/B
  • pivot_wider将属性维度转成列,最终每个被试对应两行数据,同时保留id、someVar等非条件相关变量

转换后的数据结构示例:

# A tibble: 8 × 6
     id condition someVar abcde   xyz total_c
  <dbl> <chr>       <dbl> <dbl> <dbl>   <dbl>
1     1 A               5     2     2       6
2     1 B               5     4     6      12
3     2 A               6     4     4       5
4     2 B               6     6     8      18
5     3 A               9     2     4       4
6     3 B               9     3     9      22
7     4 A               9     2     2       1
8     4 B               9     4     9      32

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 10:32:42