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

如何为数据框添加基于另一列唯一值的新列,值为对应score或0

需求实现:按分组生成对应值为score、其余为0的新列

需求说明:为数据框中Group列的每个唯一值创建独立新列,新列里仅对应原分组的行保留score列的数值,其余行全部填0。比如示例数据里的B列,只有第5-8行是5到8,其余都是0。

示例数据:

df <- data.frame(Group=rep(c('A', 'B', 'C', 'D'), each=4),
                 score=1:16)        
df

方法一:用tidyverse的pivot_wider(推荐,代码简洁)

如果习惯用tidyverse工具链,这个方法最直观,一行转换搞定:

library(tidyverse)

df_new <- df %>%
  pivot_wider(names_from = Group,  # 新列名来自Group的唯一值
              values_from = score, # 新列的值取自score
              values_fill = 0)     # 非对应分组的行填0

方法二:Base R原生实现(无需额外包)

不想加载包的话,用循环+条件判断也能轻松实现:

# 先提取Group的所有唯一值
groups <- unique(df$Group)

# 逐个生成新列
for (g in groups) {
  df[[g]] <- ifelse(df$Group == g, df$score, 0)
}

方法三:用model.matrix快速生成哑变量矩阵

适合熟悉线性模型矩阵的场景,通过哑变量与score相乘得到结果:

# 生成无截距项的哑变量矩阵,每列对应一个分组
dummy_mat <- model.matrix(~ Group - 1, data = df)
# 哑变量矩阵乘以score,再合并到原数据框
df_new <- cbind(df, dummy_mat * df$score)

验证结果:比如查看生成的B列,完全符合需求:

df_new$B
# 输出:0 0 0 0 5 6 7 8 0 0 0 0 0 0 0 0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 16:00:17