我是R的新手,我正在努力解决这个问题。我有两个数据集。
首先是每个客户的交易记录:
transactions <- dplyr::tibble(order_id = c(1,2,3),
customer_id = c(1,1,2),
order_date =c("01.02.2023 10:00:00","01.04.2023 10:00:00","01.02.2023 10:00:00"))
第二种是当客户收到一封电子邮件时,客户可以在两个订单之间收到多封电子邮件:
emails <- dplyr::tibble(email_id = c(1,2,3,4,5,6),
customer_id = c(1,1,1,1,2,2),
email_date =c("01.01.2023 10:00:00",
"01.01.2023 12:00:00",
"01.02.2023 08:00:00",
"01.02.2023 09:00:00",
"01.02.2023 10:00:00",
"01.02.2023 11:00:00"))
我想在第一个数据集中添加一列,如果客户在交易前24小时内收到电子邮件,则该列将返回TRUE。
| 客户标识|订单标识|订单日期|最近24小时的电子邮件|
| - ------|- ------|- ------|- ------|
| 1个|1个|二○二三年二月一日十时|正确|
| 1个|第二章|2023年2月1日09时00分|错误|
3条答案
按热度按时间ztyzrc3y1#
制作测试数据集:
写一个你想要的函数:
使用它向事务表中添加列:
| 客户标识|订单日期|已接收_电子邮件|
| - ------|- ------|- ------|
| 1个|2023年2月1日10时00分|正确|
| 第二章|2023年2月1日10时00分|错误|
或以其他方式加入、分组和总结:
0s0u357o2#
您可以在R中使用
merge()
函数连接customer_id列上的两个数据集,然后使用difftime()
函数计算email_date
和order_date
列之间的时间差。可以使用ifelse()
语句创建一个新列,如果时差小于或等于24小时,则返回“TRUE”,否则返回“FALSE”。或使用lapply:
qyswt5oh3#
为了让这个解决方案真正发挥作用,您还应该有一个事务ID,或者至少有一些东西来标识每个客户的订单。
使用
dplyr
和lubridate
,您可以执行以下操作