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

如何在R语言中将双列长表转换为宽表?

两列长表转宽表的实现方法

Excel 实现方式

方法1:Power Query(推荐)

适合批量处理,无需复杂公式:

  1. 选中长表数据,点击「数据」选项卡 → 「从表格/区域」导入Power Query编辑器
  2. 点击「添加列」→ 「索引列」→ 「从1开始」,生成每行的序号
  3. 选中Cepas列,点击「转换」→ 「透视列」:
    • 值列选择Valor
    • 高级选项选择「不要聚合」,值列使用的函数选「保留所有行」
  4. 若存在空值(如示例中B2只有3个值,宽表有4行),可选中对应列,点击「转换」→ 「填充」→ 「向下填充」补全(或按需填充指定值)
  5. 点击「关闭并上载」,即可得到宽表

方法2:公式组合

适用于旧版Excel(无Power Query):

  1. 在长表新增辅助列C,输入公式=COUNTIF($A$2:A2,A2),下拉填充,得到每个分组内的行号
  2. 在宽表首行输入分组名(B1、B2等),在B1列第一个单元格输入数组公式:
    =INDEX($B$2:$B$8,MATCH(F$1&ROW(A1),$A$2:$A$8&$C$2:$C$8,0))
    
    按Ctrl+Shift+Enter确认,然后横向、纵向下拉填充,空值可手动补全或用IFERROR处理

Python pandas 实现方式

通过分组序号+透视完成转换,代码示例:

import pandas as pd

# 构造长表数据
df = pd.DataFrame({
    'Cepas': ['B1', 'B1', 'B1', 'B1', 'B2', 'B2', 'B2'],
    'Valor': [5.3, 4.25, 2.2, 2.5, 3.15, 2.5, 5.7]
})

# 生成每个分组内的行号
df['group_row_id'] = df.groupby('Cepas').cumcount()

# 透视转宽表
wide_df = df.pivot(
    index='group_row_id',
    columns='Cepas',
    values='Valor'
).reset_index(drop=True)

# 填充空值(示例中B2最后一行补2.5,可按需修改填充规则)
wide_df = wide_df.fillna(2.5)

# 输出结果
print(wide_df)

运行后输出:

B1    B2
0  5.30  3.15
1  4.25  2.50
2  2.20  5.70
3  2.50  2.50

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 15:37:28