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

R语言实现dataframe按分类变量水平重复行并生成dummy变量

R语言实现需求的简便方法

你需要的操作可以通过扩展原数据行数+生成哑变量两步完成,以下给出两种常用实现方案:

方案1:base R 实现(无需加载额外包)

# 构造示例数据,你可以替换为自己的dataframe
df <- data.frame(
  id = 1:3,
  A = c(2, 2, 1),
  B = c(1, 1, 1),
  C = c(3, 1, 3)
)

# 1. 计算A的水平总数p
p <- length(unique(df$A))
# 2. 把原数据每一行重复p次,得到扩展后的数据框
df_result <- df[rep(seq_len(nrow(df)), each = p), ]
# 3. 替换A列为哑变量:对应原A水平的行取1,其余取0
df_result$A <- as.integer(rep(1:p, nrow(df)) == df_result$A)

方案2:tidyverse 实现(代码可读性更高)

# 加载包
library(tidyverse)

# 构造示例数据
df <- tibble(
  id = 1:3,
  A = c(2, 2, 1),
  B = c(1, 1, 1),
  C = c(3, 1, 3)
)

p <- length(unique(df$A))

df_result <- df %>%
  # 按id分组,每行扩展为p行
  reframe(
    A = as.integer(1:p == A),
    B = B,
    C = C,
    .by = id
  )

两种方案输出的结果都和你给出的目标格式一致。如果你的A变量水平不是连续的1:p,只需要把代码里的1:p替换为sort(unique(df$A))即可适配所有情况。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:45:07