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

在R中按code、tmp分组计算wek=1与wek=2的sbd变量差值

R语言实现分组计算特定wek值的sbd差值

核心逻辑

你需要的差值不是连续行差值,而是同一code、tmp分组下wek=2对应的sbd值减去wek=1对应的sbd值,由于同分组同wek下的sbd值全部重复,直接提取两类wek的sbd值做差即可。

方案1:tidyverse(dplyr)实现(推荐)

生成带差值的完整数据集

如果需要把差值填充到原数据集的每一行,使用mutate:

library(dplyr)

# 把df替换为你的实际数据集名称
df_with_diff <- df %>%
  group_by(code, tmp) %>%
  # 取对应wek的第一个sbd值做差,避免重复值干扰
  mutate(sbd_diff = sbd[wek == 2][1] - sbd[wek == 1][1]) %>%
  ungroup()

生成分组差值汇总表

如果只需要每个分组的差值结果,使用summarise:

df_diff_summary <- df %>%
  group_by(code, tmp) %>%
  summarise(
    sbd_wek1 = unique(sbd[wek == 1]),
    sbd_wek2 = unique(sbd[wek == 2]),
    sbd_diff = sbd_wek2 - sbd_wek1,
    .groups = "drop"
  )

方案2:base R实现

不需要加载第三方包,用ave函数实现差值填充:

df$sbd_diff <- ave(
  1:nrow(df),
  df$code, df$tmp,
  FUN = function(idx) {
    sub <- df[idx, ]
    sub$sbd[sub$wek == 2][1] - sub$sbd[sub$wek == 1][1]
  }
)

注意:如果你的实际数据中存在同一(code, tmp, wek)分组下sbd值不唯一的情况,可先做聚合(比如取均值mean(sbd)、中位数median(sbd))再计算差值,避免结果出错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 15:36:03