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

R语言技术问题:如何基于唯一值展开列并整合数值列

解决方案

首先构造和你描述一致的示例数据方便测试:

df <- data.frame(
  ID = c("321", "321", "321", "067", "067", "067"),
  COLOR = c("RED", "GREEN", "BLUE", "RED", "BLUE", "YELLOW"),
  NUMBER = c(3, 10, 4, 50, 2, 3),
  stringsAsFactors = FALSE
)

方法1:使用tidyverse包的pivot_wider(推荐)

这是tidyverse生态下的标准宽格式转换函数,语法清晰直观:

library(tidyverse)

wide_df <- df %>%
  pivot_wider(
    id_cols = ID,          # 指定行标识符为ID
    names_from = COLOR,    # 把COLOR列的取值作为新列名
    values_from = NUMBER,  # 用NUMBER列的值填充对应位置
    values_fill = list(NUMBER = 0)  # 无对应值时填充0
  )

方法2:使用reshape2包的dcast

如果习惯使用reshape2包,也可以用dcast实现:

library(reshape2)

wide_df <- dcast(df, ID ~ COLOR, value.var = "NUMBER", fill = 0)

为什么之前的table方法无效?

你之前用的table()函数只能统计分组频数,没法关联NUMBER列的具体数值,所以当需要保留NUMBER的实际值时,必须用专门的长转宽函数,上面两种方法都能精准匹配ID、COLOR对应的NUMBER值,自动补0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:45:47