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

R/tidyverse中用pivot_wider()实现除ID列外所有列的宽表转换

解决方案

你可以直接在pivot_wider()的values_from参数中使用负向选择排除不需要参与宽转换的列,无需手动枚举所有待转换的数值列,也不依赖列的排列顺序:

data_long %>% 
  pivot_wider(
    id_cols = c(ID, time),
    names_from = rater,
    values_from = -c(ID, time, rater)
  )

上述写法会自动将ID、time、rater之外的所有列作为待转换的数值列,完美适配列数极多、ID列与数值列交错排列的场景,后续如果数据新增数值列也可以自动适配,不需要修改代码。


补充灵活筛选方案

如果需要更精细化的列筛选逻辑,还可以结合tidyselect生态的其他选择器实现:

  • 仅对数值类列做宽转换,自动忽略其他类型的非ID列:
data_long %>% 
  pivot_wider(
    id_cols = c(ID, time),
    names_from = rater,
    values_from = where(is.numeric) & !c(ID, time)
  )
  • 仅对符合命名规则的列做宽转换,比如示例中所有以v开头的数值列:
data_long %>% 
  pivot_wider(
    id_cols = c(ID, time),
    names_from = rater,
    values_from = starts_with("v")
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:00:00