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

R语言分组处理:将日期差30天内的组首行同步标记值

解决R语言分组后首行InWindow字段同步第二行值的问题

模拟数据

df <- data.frame(
  ID = c(1, 1, 1, 1, 2, 2, 3, 3, 3, 4, 4),
  Date = as.Date(c("2011-01-01", "2011-01-01", "2011-01-29", "2012-04-27", "2012-10-01", "2013-08-15", "2013-12-12", "2014-01-01", "2014-03-02", "2014-09-17", "2014-09-17"))
)

修改后的完整处理代码

library(dplyr)

df_processed <- df %>%
  group_by(ID) %>%
  mutate(
    LagDate = lag(Date),
    Diff = Date - LagDate,
    InWindow = ifelse(Diff < 30, TRUE, FALSE)
  ) %>%
  # 将组内首行的InWindow替换为第二行的值
  mutate(InWindow = case_when(
    row_number() == 1 ~ InWindow[2],
    TRUE ~ InWindow
  )) %>%
  ungroup()

print(df_processed)

代码说明

  1. 基础计算:按ID分组后,用lag(Date)获取前一行日期,计算日期差值Diff,再判断差值是否小于30天得到初始的InWindow标记。此时组内首行因无前置数据,InWindow为NA。
  2. 首行值替换:新增mutate步骤,通过row_number() == 1定位组内首行,直接取组内第二行的InWindow值覆盖首行的NA;其余行保持原有标记不变。
  3. 取消分组:最后用ungroup()解除分组状态,避免对后续数据操作造成影响。

边界情况处理(可选)

如果数据中存在仅含单行的ID,InWindow[2]会返回NA,可按需补充逻辑,例如:

mutate(InWindow = case_when(
  n() == 1 ~ NA,  # 单行组保持NA,或设为其他默认值
  row_number() == 1 ~ InWindow[2],
  TRUE ~ InWindow
))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 03:43:19