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

R语言:解决按Athletes连接不等长tibble的多对多重复问题

解决方案

核心问题在于你的两个tibble都是长格式结构(每个运动员对应多条记录),直接按Athletes连接会触发多对多关系(同一运动员在两个表中均有多行),导致数据重复与警告。正确的做法是先合并数据集,再转换为宽格式实现按运动员聚合,同时填充缺失值。

修正代码

替换你代码中#### TRYING TO JOIN TIBBLES ----之后的部分,使用以下代码:

# 合并两个结构相同的tibble
combined_data <- bind_rows(traitement_RPE, traitement_VOL)

# 转换为宽格式:每个运动员一行,RPE和VOL作为列,缺失值填充NA
bilan_wide <- combined_data |>
  pivot_wider(
    id_cols = Athletes,
    names_from = Type,
    values_from = Valeur,
    values_fill = list(Valeur = NA)  # 若要直接填充0,将NA改为0即可
  )

# 若需要将NA统一替换为0,执行以下步骤
bilan_wide <- bilan_wide |>
  mutate(
    RPE = replace_na(RPE, 0),
    VOL = replace_na(VOL, 0)
  )

# 查看最终结果
print(bilan_wide)

# 导出结果(可选)
# write.xlsx(bilan_wide, file = "Bilan_Athletes.xls")

关键说明

  1. 合并长格式数据:用bind_rows()将两个结构一致的tibble合并,保留所有运动员的所有记录。
  2. 转宽格式聚合:pivot_wider()按Athletes分组,将Type列的RPE和VOL转为列名,Valeur作为对应列的值,自动为仅存在于一个表中的运动员填充NA。
  3. 缺失值替换:通过replace_na()将NA替换为0,满足你的需求。

为什么之前的方法无效

  • left_join()/full_join():仅按Athletes连接时,同一运动员在两个表中的多行记录会生成笛卡尔积(比如运动员A在RPE有3行、VOL有2行,连接后会生成6行),因此触发多对多警告,且Type列重复。
  • merge():本质和left_join逻辑一致,同样会生成行级别的连接结果,而非你需要的按运动员聚合的列连接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 06:24:56