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

如何在dplyr的mutate中跳过指定行数选择行索引迭代生成新列

dplyr mutate 分组偏移计算解决方案

实现需求的代码如下:

library(dplyr)

result <- df %>%
  # 按Itemnumber分组
  group_by(Itemnumber) %>%
  # 统计每组行数
  mutate(n = n()) %>%
  # 过滤行数大于1的分组
  filter(n > 1) %>%
  mutate(
    # 临时存储计算结果,第i行对应新列第i+1行要填充的值
    temp_calc = column_B + lead(column_A, 1L) - (lead(column_D, 1L) - lead(column_E, 1L)),
    # 拼接生成新列:第一行取当前分组column_B的首个值,后续行取临时计算结果去掉末尾NA的部分
    new_col = c(first(column_B), temp_calc[-n()])
  ) %>%
  # 按需删除临时计算列
  select(-temp_calc)

逻辑说明

  • 临时计算列temp_calc的输出和你原有代码的new_col完全一致,其中第k行的值正是你要放到新列第k+1行的计算结果
  • 构造新列时直接用向量拼接:第一个元素固定取当前分组column_B的第一个值,后续元素直接取temp_calc去掉最后一位(即原本末尾的NA)的结果,刚好实现整体向下偏移1行的需求,同时避免了末尾出现NA
  • 如果原始数据分组内顺序不固定,建议在分组后增加arrange(排序列)步骤,保证计算顺序符合业务逻辑

用你提供的示例数据测试,输出的80126分组结果和你给出的期望效果完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:06:03