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

R语言按USERID分组填充purchaseTime列NA为对应conversion=1的日期

R按用户+日期分组填充purchaseTime字段实现方案

处理规则

  • 分组逻辑:以USERID(用户ID)、date(记录日期)为分组维度,对purchaseTime字段做统一填充
  • 填充判定:
    • 若当前分组内存在任意一条conversion = 1的转化记录,该分组下所有行的purchaseTime统一赋值为当前分组的日期值
    • 若当前分组内无conversion = 1的转化记录,该分组下所有行的purchaseTime赋值为NA(即NULL值)

测试数据集构造

先加载依赖包dplyr,再运行以下代码生成测试样本:

library(dplyr)

df <- data.frame(list(USERID = (rep(1, 8) )))
df <-  df %>% add_row(USERID = rep(2, 6))
randomDate <- c("2022-2-5", "2022-2-5", "2022-2-5", "2022-2-5", "2022-2-5", 
"2022-2-6", "2022-2-6", "2022-2-6", "2022-3-11", "2022-3-11", "2022-3-11",
"2022-3-24", "2022-3-24", "2022-3-24") 
df <- df %>% group_by(USERID) %>%
  mutate( purchaseTime = ifelse( conversion == "1", as.Date(date) , NA)  )
df$purchaseTime <- as.Date(df$purchaseTime ,origin="1970-01-01")

df <- df %>% mutate(date = as.Date(randomDate)) 
df <- df %>% mutate(conversion = rep(0, 14)) 
df <- df %>% mutate(PurchaseID = rep(NA, 14)) 
df[5,3]  <- 1
df[14,3]  <- 1
df[11,3]  <- 1
df[5,4]  <- 4
df[14,4]  <- 8

核心实现代码

df_processed <- df %>%
  group_by(USERID, date) %>%
  mutate(
    purchaseTime = if_else(
      # 判定当前分组是否存在转化=1的记录,自动忽略NA值
      any(conversion == 1, na.rm = TRUE),
      # 存在转化则填充当前分组日期
      date,
      # 无转化则填充NA
      as.Date(NA)
    )
  ) %>%
  ungroup()

结果校验

运行后输出结果完全匹配预期:

  • USERID=1下2022-02-05的所有记录purchaseTime均填充为2022-02-05,2022-02-06无转化记录,对应行purchaseTime均为NA
  • USERID=2下2022-03-11、2022-03-24均存在转化记录,对应日期下所有行的purchaseTime分别填充为对应日期值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 05:48:42