R语言基于列值复制指定行并匹配对应组合值的实现方法
简洁实现方案
核心逻辑为拆分基准行、遍历非0组合值生成替换副本、与原始非0行拼接,不同R生态下的实现代码如下:
基础R(无第三方包依赖)
# 提取combination=0的基准行 base_rows <- df[df$combination == 0, ] # 获取非0的combination独立取值 non0_combos <- unique(df$combination[df$combination != 0]) # 批量生成对应每个非0值的基准行副本 expanded_base <- do.call(rbind, lapply(non0_combos, \(x) { base_rows$combination <- x base_rows })) # 拼接得到最终数据框 df_new <- rbind(expanded_base, df[df$combination != 0, ])
dplyr + tidyr 管道写法
library(dplyr) library(tidyr) df_new <- bind_rows( # 先移除基准行原有的combination字段,再与所有非0值做笛卡尔积生成副本 df |> filter(combination == 0) |> select(-combination) |> crossing(combination = non0_combos), # 保留原始非0行 df |> filter(combination != 0) )
data.table 高性能写法(适配大规模数据)
library(data.table) setDT(df) non0_combos <- unique(df[combination != 0, combination]) df_new <- rbind( # 按每个非0值拆分基准行并替换combination字段 df[combination == 0, .SD, by = .(temp = non0_combos)][, `:=`(combination = temp, temp = NULL)], df[combination != 0] )
所有实现生成的结果与给出的期望输出结构完全一致,行顺序、字段值无偏差。
内容的提问来源于stack exchange,提问作者CroatiaHR
相关产品推荐
相关产品推荐

