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

使用Tidyr扩展含多键/值的数据表遇问题求解决方案

解决方法

你的问题核心是spread会将除key和value之外的所有列作为分组依据,只要这些列存在不同值,就会生成多行结果。以下是几种简单可行的处理方式:

1. 先筛选必要列再扩展

如果原数据表Have里有多余的列(比如无关的ID、时间戳等),先只保留Group和Number列再执行扩展:

Want = Have |> 
  select(Group, Number) |> 
  spread(key = Group, value = Number)

2. 先汇总重复分组再扩展

如果需要保留其他列(比如用户ID),但同一分组下存在多个Number值,先对Number做汇总(求和/均值等)再扩展:

Want = Have |> 
  group_by(需要保留的列名, Group) |> 
  summarise(Number = sum(Number), .groups = "drop") |> # sum可替换为mean/max等
  spread(key = Group, value = Number)

3. 推荐使用pivot_wider替代spread

spread是tidyr的旧版函数,现已被更灵活的pivot_wider取代,写法更清晰且兼容性更好:

# 筛选列后扩展
Want = Have |> 
  select(Group, Number) |> 
  pivot_wider(names_from = Group, values_from = Number)

# 带保留列+汇总的写法
Want = Have |> 
  group_by(需要保留的列名, Group) |> 
  summarise(Number = sum(Number), .groups = "drop") |> 
  pivot_wider(names_from = Group, values_from = Number)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 23:30:01