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

如何在R中对含重复行的分组执行日期维度的lag操作

解决方案

要实现按公司分组取上一日期的价格作为滞后值,同时保留原数据所有行,可以通过先提取公司-日期层面的价格并生成滞后值,再关联回原数据集的方式解决:

library(dplyr)

# 第一步:生成每个公司各日期对应的滞后价格(仅处理到日期维度)
date_level_lags <- data %>%
  # 提取唯一的公司-日期组合,保留价格
  distinct(company, date, .keep_all = TRUE) %>%
  # 按公司分组
  group_by(company) %>%
  # 生成该公司上一日期的价格
  mutate(lagged_price = lag(price)) %>%
  ungroup()

# 第二步:将滞后值关联回原数据集,保留所有原始行
out <- data %>%
  left_join(date_level_lags, by = c("company", "date", "price"))

代码说明

  1. distinct(company, date, .keep_all = TRUE):仅保留每个公司不同日期的唯一记录,避免重复处理同一日期的价格,这一步不会修改原数据集的行数,只是生成一个精简的日期维度辅助表。
  2. 对辅助表按公司分组后用lag(price),就能得到每个日期对应的上一日期价格,解决了原代码中按行滞后的问题。
  3. left_join将辅助表的滞后值匹配回原数据集的每一行,确保所有原始行都被保留,且同一日期的所有行都会拿到相同的上一日期价格。

验证结果

运行上述代码后,out的结果将完全符合需求:

datepricecompanylagged_price
2000-10-0118ANA
2001-10-0120A18
2001-10-0120A18
2001-10-0120A18

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 03:41:42