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

如何按ID分组添加指定行数 实现R语言数据反聚合操作

R实现数据行反聚合的解决方法

原有代码问题说明

你原来的代码仅调用add_row(.)默认只会新增1行,没有匹配Allocated和Remaining字段的计数规则,因此无法实现指定行数的批量新增。

实现方案

方案1:tidyr::uncount 简洁实现(推荐)

uncount是tidyr专门用于按计数字段展开行的函数,配合长表转换即可快速实现需求:

  1. 先加载依赖包
library(dplyr)
library(tidyr)
  1. 数据处理代码
# 构造示例数据
df <- data.frame(
  ID = c("A", "B", "C"),
  Allocated = c(2, 1, 0),
  Remaining = c(4, 2, 1)
)

# 反聚合处理
df_result <- df %>%
  # 提取每个ID对应1和0的生成数量
  mutate(n_1 = Allocated, n_0 = Remaining) %>%
  select(ID, n_1, n_0) %>%
  # 转为长表结构
  pivot_longer(cols = -ID, values_to = "count") %>%
  # 生成Sourced字段值
  mutate(Sourced = as.integer(name == "n_1")) %>%
  # 按计数展开为多行
  uncount(count) %>%
  select(ID, Sourced)

运行后输出结果完全匹配你给出的目标表结构。

方案2:适配原有group_by + do的思路

如果你要沿用分组后逐组处理的逻辑,可以在do内直接生成指定长度的Sourced向量:

df_result <- df %>%
  group_by(ID) %>%
  do(data.frame(
    Sourced = rep(c(1, 0), c(.$Allocated, .$Remaining))
  )) %>%
  ungroup()

该写法逻辑和你最初的实现思路完全一致:每组先生成Allocated个值为1的行,再生成Remaining个值为0的行,拼接后得到最终结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:18:04