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

如何在R中使用pivot_wider实现行宽化并合并分组行?

问题描述
  • 现有数据集包含Group ID、Person、Role、Payoff字段,每个Group ID下对应Role为A和B的两行数据
  • 目标:用R将数据集转为宽表,同一Group ID对应的Role A、B的Person和Payoff值合并到同一行
  • 遇到的问题:使用pivot_wider(names_from = Role, values_from = c(Person, Payoff))后,同一Group ID被分成两行,且存在大量NA值
  • 已尝试但未解决的代码:
    data %>%
      group_by('session_group_id') %>% 
      pivot_wider(names_from = Role, values_from = c(Person, Payoff))
    
    data %>%
      group_by('session_group_id') %>%
      pivot_wider(names_from = Role,
                  values_from = c(Person, Payoff),
                  values_fn = list)
    
解决方法

问题根源有两个:

  1. group_by中给字段名加了引号,导致分组依据变成字符串常量而非实际列名,需去掉引号
  2. 不需要额外执行group_by,pivot_wider可通过指定id_cols自动完成分组合并

正确代码(假设Group ID列名为session_group_id)

data %>%
  pivot_wider(
    id_cols = session_group_id,  # 指定作为行唯一标识的列
    names_from = Role,
    values_from = c(Person, Payoff)
  )

特殊情况处理

如果你的Group ID列名是带空格的Group ID,需要用反引号包裹列名:

data %>%
  pivot_wider(
    id_cols = `Group ID`,
    names_from = Role,
    values_from = c(Person, Payoff)
  )

效果验证

假设原始数据为:

session_group_idPersonRolePayoff
1AliceA100
1BobB200
2CharlieA150
2DaveB250

运行代码后会得到目标宽表:

session_group_idPerson_APerson_BPayoff_APayoff_B
1AliceBob100200
2CharlieDave150250

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 23:55:24