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

求助:为每个product_id组的最后一条观测值生成哑变量

解决方案

首先要注意:你的Date列目前是字符格式,必须先转换成日期类型,不然没法正确判断日期的先后顺序。下面给两种实现方法,按需选择:

方法一:用dplyr包(tidyverse风格)

library(dplyr)

# 转换日期格式,按product_id分组后标记最新记录
df_processed <- df %>%
  mutate(Date = as.Date(Date, format = "%d-%m-%Y")) %>%
  group_by(product_id) %>%
  mutate(is_last = ifelse(Date == max(Date), 1, 0)) %>%
  ungroup()

# 查看处理后的数据
print(df_processed)

方法二:基础R实现(无需额外包)

# 先把字符型日期转成日期格式
df$Date <- as.Date(df$Date, format = "%d-%m-%Y")

# 按product_id分组,每组内按日期降序排序
df_sorted <- df[order(df$product_id, -as.numeric(df$Date)), ]

# 每组的第一条就是最新记录,标记为1,重复的product_id标记为0
df_sorted$is_last <- as.numeric(!duplicated(df_sorted$product_id))

# 可选:恢复原数据的行顺序
df_processed <- df_sorted[order(row.names(df_sorted)), ]

# 查看结果
print(df_processed)

结果说明

处理后会新增一列is_last,每个product_id对应的最新日期行取值为1,其余行取值为0。以你的示例数据为例:

  • 10000567的最新日期是2020-12-12,对应行is_last=1
  • 10000123的最新日期是2020-11-26,对应行is_last=1
  • 10000222的最新日期是2020-10-09,对应行is_last=1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 09:23:12