求助:为每个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
相关产品推荐
相关产品推荐

