如何在R语言中将双列长表转换为宽表?
两列长表转宽表的实现方法
Excel 实现方式
方法1:Power Query(推荐)
适合批量处理,无需复杂公式:
- 选中长表数据,点击「数据」选项卡 → 「从表格/区域」导入Power Query编辑器
- 点击「添加列」→ 「索引列」→ 「从1开始」,生成每行的序号
- 选中
Cepas列,点击「转换」→ 「透视列」:- 值列选择
Valor - 高级选项选择「不要聚合」,值列使用的函数选「保留所有行」
- 值列选择
- 若存在空值(如示例中B2只有3个值,宽表有4行),可选中对应列,点击「转换」→ 「填充」→ 「向下填充」补全(或按需填充指定值)
- 点击「关闭并上载」,即可得到宽表
方法2:公式组合
适用于旧版Excel(无Power Query):
- 在长表新增辅助列C,输入公式
=COUNTIF($A$2:A2,A2),下拉填充,得到每个分组内的行号 - 在宽表首行输入分组名(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
相关产品推荐
相关产品推荐

