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

R宽格式数据转长格式:基于指定key设置分组变量层级的方法

R数据集长格式转换+自定义strata分组实现方案

1. 示例数据集构造

首先将你提供的数据集导入R环境:

df <- structure(list(group = c("A", "B", "A", "B", "B", "A", "A"), 
    technique = c("attack", "defenese", "attack ", "defense ", 
    "defense ", "attack", "defense "), outcome1.part1 = c(24L, 
    1234L, 15L, 234L, 23L, 3L, 3L), outcome1.part.2 = c(52L, 
    321L, 23L, 234L, 234L, 145L, 145L), outcome1.part.3 = c(14L, 
    23L, 3L, 2L, 234L, 234L, 234L), outcome2.part.1 = c(14L, 
    234L, 145L, 4L, 234L, 145L, 145L), outcome2.part.2 = c(234L, 
    234L, 234L, 234L, 234L, 234L, 234L), outcome2.part.3 = c(234L, 
    234L, 234L, 234L, 145L, 145L, 145L)), class = "data.frame", row.names = c(NA, 
-7L))

2. 核心实现逻辑

本方案完全不依赖正则表达式解析规则,仅需修改匹配key向量即可自动适配分组需求,调整灵活度高:

# 加载依赖包
library(dplyr)
library(tidyr)

# 1. 定义不需要转长格式的标识列
id_cols <- c("group", "technique")
# 2. 自定义匹配key,可任意修改无需调整其他逻辑
# 注意key要和列名中的短语完全一致,示例中存在outcome1.part1列,因此第一个key设为part1
match_key <- c("part1", "part.2", "part.3")

# 3. 转换逻辑
df_long <- lapply(match_key, function(k){
  # 精确匹配包含当前key的列,fixed=TRUE表示不解析正则,仅做普通字符串匹配
  target_cols <- c(id_cols, grep(k, colnames(df), fixed = TRUE, value = TRUE))
  # 提取对应列转长格式并新增strata分组列
  df_sub <- df[, target_cols] %>%
    pivot_longer(cols = -all_of(id_cols), names_to = "outcome_type", values_to = "value") %>%
    mutate(strata = k)
  return(df_sub)
}) %>% bind_rows()

3. 效果说明

转换后的长格式数据会新增strata列,取值与你定义的match_key完全对应,每一行strata取值对应的都是原数据中列名包含该key短语的记录。

注意事项

  • 自定义的match_key需要和列名中包含的目标短语完全一致,匹配时不会做模糊处理
  • 只要定义的key之间不存在互相包含的关系,匹配逻辑就不会出现冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:57:03