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

如何用dplyr/tidyverse重塑数据框为每玩家单行列示weight与r得分格式

解法(基于tidyverse生态)

直接使用tidyr包的pivot_longer()多值匹配转换功能即可实现,完全保留原有行顺序、标识字段不变,自动保证同玩家的r得分和weight权重配对正确,不会出现错配。

完整可运行代码

# 加载tidyverse(包含dplyr、tidyr等核心包)
library(tidyverse)

# 原始示例数据
df <- data.frame(
  gameround= c("1_1", "1_2", "1_3"),
  r001 = c(3,5,4), 
  r002 = c(2,3,5), 
  r003 = c(1,2,2), 
  weight001=c(0.7,0.8,0.7), 
  weight002 = c(0.6,0.1,0.6), 
  weight003=c(0.2,0.7,0.2)
)

# 宽表转长表核心逻辑
df_long <- df %>%
  pivot_longer(
    cols = -gameround, # 仅转换除对局标识外的所有列
    names_to = c(".value", "player_id"), 
    # 正则匹配列名:前缀为r/weight,后缀为玩家ID数字
    names_pattern = "(r|weight)(\\d+)"
  )

可选字段调整(完全匹配期望输出格式)

如果需要完全对齐示例中的weightid、rid字段,可额外增加字段重命名、排序逻辑:

df_long <- df_long %>%
  mutate(weightid = player_id, rid = player_id) %>%
  select(gameround, weightid, weight, rid, r)

输出验证

转换后的结果与需求给出的期望输出完全一致,对局顺序、玩家ID顺序都与原宽表保持相同,同玩家的r和weight配对100%准确。

内容的提问来源于stack exchange,提问作者scarlett rouge

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:24:04