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

R语言按id_n分组计算duper列相邻行差值的实现咨询

解决方案

以下提供两种常用实现方式,可根据你的使用习惯选择:

方案1:使用dplyr包(推荐,代码简洁易读)

适合习惯使用tidyverse生态的场景,逻辑清晰不易出错:

# 加载依赖包
library(dplyr)

# 计算目标差值列
df_result <- df %>%
  # 按id_n字段分组
  group_by(id_n) %>%
  # 组内按npu从小到大排序,确保计算顺序符合要求
  arrange(npu, .by_group = TRUE) %>%
  # 新增差值列:当前行duper减去上一行duper,组内首行自动返回NA
  mutate(duper_diff = duper - lag(duper)) %>%
  # 取消分组,恢复普通数据框格式
  ungroup()

方案2:Base R实现(无需额外安装包)

适配你已经可以拆分出id_n对应子数据框的现有进度,用原生函数即可完成:

# 按id_n拆分数据框(你已完成这步可直接跳过)
df_split <- split(df, df$id_n)

# 对每个子数据框执行差值计算
df_split <- lapply(df_split, function(sub_df) {
  # 组内按npu从小到大排序
  sub_df <- sub_df[order(sub_df$npu), ]
  # diff默认计算后项减前项,首行补NA对齐行数
  sub_df$duper_diff <- c(NA, diff(sub_df$duper))
  return(sub_df)
})

# 合并所有子数据框得到最终结果
df_result <- do.call(rbind, df_split)
# 可选:重置行名
rownames(df_result) <- NULL

注意事项

  • 若你的duper列是字符型(比如简化示例里写的字符串格式),计算前需先转为数值型:df$duper <- as.numeric(df$duper),否则会出现运算报错。
  • 原数据中duper列的NA值会导致对应位置的差值也返回NA,属于正常运算逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:24:03