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

如何在R的dplyr中通过case_when从另一个数据框传递变量

解决你的数据框日期传递问题

嘿,这是个很常见的dplyr操作需求,我来帮你搞定它!

首先,你的核心需求是把单行数据框df2里的delivery_date值,用到df1的mutate逻辑里生成对应的send_date。因为df2只有一行,我们可以直接提取它的日期值来使用,下面是两种可行的方案:

方案一:提前提取日期值(推荐,代码更清晰)

先把df2里的日期单独存成一个变量,这样在case_when里使用起来更直观,也避免后续df2结构变化时出问题:

library(dplyr)
library(lubridate)

# 从df2提取单行的delivery_date值
base_date <- df2$delivery_date

test_d <- df1 %>% 
  mutate(send_date = case_when(
    type == "invite" ~ base_date,
    type == "reminder" ~ base_date + days(2),
    type == "final" ~ base_date + days(5) # 这里替换成你实际需要的日期偏移逻辑
  ))

方案二:直接在case_when中引用df2的列

如果确定df2永远只有一行,也可以直接在case_when里用df2$delivery_date,R会自动把这个长度为1的向量循环匹配到df1的每一行:

library(dplyr)
library(lubridate)

test_d <- df1 %>% 
  mutate(send_date = case_when(
    type == "invite" ~ df2$delivery_date,
    type == "reminder" ~ df2$delivery_date + days(2),
    type == "final" ~ df2$delivery_date + days(5) # 补全你的final类型逻辑
  ))

验证结果

不管用哪种方案,最终生成的test_d都会是这样的结果:

type  send_date
1     invite 2018-05-07
2  reminder 2018-05-09
3     final 2018-05-12

需要注意的是,如果后续df2变成多行数据框,第二种方案就会出错,所以第一种提前提取的方式更稳妥哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:02:49