【发布时间】:2015-05-25 18:09:48
【问题描述】:
我的数据框看起来像这样。最右边的两列是我想要的列。
**Name ActivityType ActivityDate Email(last 21 says) Webinar(last21)**
John Email 1/1/2014 NA NA
John Webinar 1/5/2014 NA NA
John Sale 1/20/2014 Yes Yes
John Webinar 3/25/2014 NA NA
John Sale 4/1/2014 No Yes
John Sale 7/1/2014 No No
Tom Email 1/1/2015 NA NA
Tom Webinar 1/5/2015 NA NA
Tom Sale 1/20/2015 Yes Yes
Tom Webinar 3/25/2015 NA NA
Tom Sale 4/1/2015 No Yes
Tom Sale 7/1/2015 No No
我只是想创建一个是/否变量来表示在过去 21 天内是否有针对每个“销售”交易的电子邮件或网络研讨会。我在想(模拟代码)以这种方式使用 dplyr:
custlife %>%
group_by(Name) %>%
mutate(Email(last21days)=lag(ifelse(ActivityType = "Email" & ActivityDate of email within (activity date of sale - 21),Yes,No)).
我不确定实现这一点的方法。请帮忙。衷心感谢您的帮助!
【问题讨论】:
-
如果你有一整天的时间,例如 2014 年 1 月 1 日、2014 年 2 月 1 日、2014 年 3 月 1 日……那么你可以在
cumsum(Email)和lag(x, k = 21)上工作。顺便说一句,在上述问题的上下文中,可以跳过 NA 电子邮件行。其他低效的方法是生成一组日期,其中之前的电子邮件不超过 21 天或同一天。然后加入原始集合。 -
为什么
Webinar行也有“yes”,你不是只检查Sale行吗? -
@DavidArenburg 你是对的。我在制作示例时犯了一个错误。感谢您指出这一点。
-
数据在哪里??
-
@jangorecki 你是什么意思?数据在问题中