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

如何将数据表中多列类别转置为列分组变量并重构数据结构?

问题描述

需要将数据中的前四列(test1至test4)重新整理为单列response,同时保证每个值与对应的测试项、主体编号、试次编号等信息准确关联。示例仅做简化展示,实际处理的是大规模数据集。

参考Python实现代码

import pandas as pd
data = pd.read_csv('cleaned.csv')
# data.head()
# data.columns
ids = data.columns[278:].tolist()
new_data = pd.DataFrame([], columns=['value', 'name1', 'name2'] + ids)
n_data = len(data) - 1
for i in range(278):
    cur_feature = data[[data.columns[i]] + ids].drop(0)
    cur_feature.rename(columns={data.columns[i]: 'value'}, inplace=True)
    cur_feature['name1'] = [data.columns[i]] * n_data
    cur_feature['name2'] = [data.iloc[0, i]] * n_data
    new_data = pd.concat([new_data, cur_feature])

R语言解决方案

简化场景(针对test1-test4)

用tidyr包的pivot_longer()可高效完成宽表转长表,无需循环,适配大规模数据集:

library(tidyr)
library(dplyr)

# 假设数据框名为df,将test开头的列转为response列,保留其他标识列
df_long <- df %>%
  pivot_longer(
    cols = starts_with("test"),
    names_to = "测试项",
    values_to = "response"
  )

适配Python代码的通用场景(278列转置)

如果数据结构与Python代码一致(前278列为特征列,剩余为标识列,第一行是特征列的额外信息),可按以下方式实现:

library(tidyr)
library(dplyr)

# 读取数据
df <- read.csv("cleaned.csv")

# 定义特征列和标识列范围
feature_cols <- colnames(df)[1:278]
id_cols <- colnames(df)[279:ncol(df)]

# 生成目标数据框
df_long <- df %>%
  # 移除第一行(对应Python中的drop(0))
  slice(-1) %>%
  # 宽转长,提取特征列的列名和值
  pivot_longer(
    cols = all_of(feature_cols),
    names_to = "name1",
    values_to = "value"
  ) %>%
  # 关联原特征列第一行的name2信息
  left_join(
    df %>%
      slice(1) %>%
      pivot_longer(
        cols = all_of(feature_cols),
        names_to = "name1",
        values_to = "name2"
      ) %>%
      select(name1, name2),
    by = "name1"
  ) %>%
  # 调整列顺序与Python输出一致
  select(value, name1, name2, all_of(id_cols))

额外提示会 striking费 Read ambiguous_rec提示有利精选 store(大 ensure)

  • pivot_longer()比循环实现效率高数倍,完全适配大规模数据集处理
  • 如果第一行是列的注释而非数据,建议读取时直接跳过:read.csv("cleaned.csv", skip = 1),后续处理会更简洁

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 06:15:17