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

如何使用pivot_wider实现单ID单行的双值列宽表转换?

解决pivot_wider转换宽表的values_from参数问题

针对你的需求,直接通过pivot_wider的参数组合就能实现每个ID对应一行的宽表转换,核心是明确names_from和values_from的对应关系:

library(tidyr)

# 你的示例数据
df<- data.frame(ID = c(1,1,2,2,3,3),
           category = c("A","B","A","C","A","C"),
           date = c(Sys.Date(), Sys.Date()-10, Sys.Date(), 
                    Sys.Date()-10, Sys.Date(), Sys.Date()-10))

# 执行宽表转换
wide_df <- pivot_wider(
  data = df,
  id_cols = ID,          # 指定作为行唯一标识的列
  names_from = category, # 用category的取值作为新列名
  values_from = date     # 用date列的值填充新生成的列
)

print(wide_df)

运行后会得到目标结构的宽表:

# A tibble: 3 × 4
     ID A          B          C         
  <dbl> <date>     <date>     <date>    
1     1 2024-05-20 2024-05-10 NA        
2     2 2024-05-20 NA         2024-05-10
3     3 2024-05-20 NA         2024-05-10

参数说明

  • id_cols: 锁定ID作为行的唯一标识,确保每个ID只保留一行
  • names_from: 将category列的离散值(A/B/C)拆解为新的列名
  • values_from: 指定用date列的内容填充这些新列

如果实际数据中存在同一ID+category对应多个日期的情况,可以用values_fn参数做聚合处理,比如取最新日期:

wide_df <- pivot_wider(
  data = df,
  id_cols = ID,
  names_from = category,
  values_from = date,
  values_fn = max # 取每个分组的最大日期
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:55:22