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

如何在R DataFrame中用lead函数获取欢迎饮后各饮品首次饮用时间?

解决方案

首先构造可复现的原始数据框:

df <- data.frame(
  Name = rep("Josh", 6),
  Date = as.Date(c("2022-06-24", "2022-07-01", "2022-07-03", "2022-07-24", "2022-07-28", "2022-07-29")),
  Drink = c("Welcome Drink", "Beer", "Wine", "Cocktail", "Wine", "Beer")
)

方法一:明确指定饮品聚合

适合已知所有饮品类型的场景,直接分组后提取每种饮品的首次日期:

library(tidyverse)

result <- df %>%
  group_by(Name) %>%
  summarize(
    `Welcome drink` = first(Date[Drink == "Welcome Drink"]),
    `1stBeer` = first(Date[Drink == "Beer"]),
    `1stWine` = first(Date[Drink == "Wine"]),
    `1stCocktail` = first(Date[Drink == "Cocktail"])
  )

# 输出结果
result

方法二:动态适配所有饮品类型

如果饮品类型不确定,用动态分组转宽的方式更灵活:

library(tidyverse)

result <- df %>%
  # 按姓名和饮品分组,取首次饮用日期
  group_by(Name, Drink) %>%
  summarize(first_date = first(Date)) %>%
  ungroup() %>%
  # 转成宽格式,自动处理列名
  pivot_wider(
    names_from = Drink,
    values_from = first_date,
    names_prefix = "1st",
    # 单独调整Welcome Drink的列名
    names_transform = ~ ifelse(.x == "Welcome Drink", "Welcome drink", .x)
  ) %>%
  # 调整列顺序,把Welcome drink放在最前面
  select(Name, `Welcome drink`, everything())

# 输出结果
result

为什么lead()不适用?

lead()函数的作用是提取同一分组中后续行的值,它是针对行序列的偏移操作,而非聚合分组内的首次出现值,所以无法满足“提取每种饮品首次饮用时间”的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 09:51:30