在R语言中扩展DataFrame并设置对应数量的Dummy_N值
R语言实现按组扩展数据并设置Dummy_N列的1/0数量
首先构造原始数据框方便复现:
df <- data.frame( Group = c(1, 2), Dummy_N = c(1, 2), Total_N = c(4, 3), `Other val` = c("x", "y") )
方法1:基于你现有代码修正
你已经通过rep完成了行扩展,但Dummy_N列还保留原始值,只需按每组的Dummy_N和Total_N生成对应数量的1和0即可:
# 你的行扩展代码 df.expanded <- df[rep(row.names(df), df$Total_N), 1:4] # 重新生成Dummy_N列的数值 df.expanded$Dummy_N <- unlist(lapply(1:nrow(df), function(i) { # 先填指定数量的1,再填剩余数量的0 c(rep(1, df$Dummy_N[i]), rep(0, df$Total_N[i] - df$Dummy_N[i])) }))
方法2:用tidyverse工具一步完成
如果习惯用tidyverse生态,用dplyr+tidyr可以更简洁地一步生成目标数据:
library(dplyr) library(tidyr) df.expanded <- df %>% rowwise() %>% # 按行生成包含1和0的向量列表 mutate(Dummy_N = list(c(rep(1, Dummy_N), rep(0, Total_N - Dummy_N)))) %>% # 将列表展开为多行 unnest(Dummy_N)
两种方法最终生成的结果都和你给出的示例一致。
内容的提问来源于stack exchange,提问作者Swaroop Poudel
相关产品推荐
相关产品推荐

