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

如何在R中正确将宽结构面板数据格式化为长结构

可行实现方案

Python(pandas ≥ 1.3.0)

直接使用pandas内置的pivot_longer方法,匹配列名规则直接完成转换,无需额外拆分拼接:

import pandas as pd

# 你的原始数据
df = pd.DataFrame({
    "ID": [1, 2],
    "Treatment": [2, 1],
    "Round_1_Decision1": [1, 0],
    "Round_1_Decision2": [0, 0],
    "Round_2_Decision1": [0, 1],
    "Round_2_Decision2": [1, 1]
})

# 宽转长核心代码
result = df.pivot_longer(
    index=["ID", "Treatment"],
    names_pattern=r"Round_(\d+)_(Decision\d)",
    names_to=["Round", ".value"]
)

如果你用的是低版本pandas,也可以配合列名重命名+wide_to_long实现,逻辑完全一致。


R(tidyverse)

使用tidyr的pivot_longer方法,语法逻辑和pandas版本基本一致:

library(tidyverse)

# 你的原始数据
df <- tibble(
  ID = c(1, 2),
  Treatment = c(2, 1),
  Round_1_Decision1 = c(1, 0),
  Round_1_Decision2 = c(0, 0),
  Round_2_Decision1 = c(0, 1),
  Round_2_Decision2 = c(1, 1)
)

# 宽转长核心代码
result <- df %>% 
  pivot_longer(
    cols = starts_with("Round"),
    names_pattern = "Round_(\\d+)_(Decision\\d)",
    names_to = c("Round", ".value")
  )

以上两种方案都直接适配你当前的列名规则,不需要你手动对melt/stack的结果做二次拆分、拼接,不会出现维度错位问题,运行结果完全符合你需要的输出结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:45:11