【发布时间】:2018-05-05 23:10:25
【问题描述】:
我一直在努力寻找解决这个问题的最佳方法。
为了概括这个问题并帮助可能发现自己需要执行类似任务的其他人,我正在尝试找到将列从第三个数据集添加到一个数据集的最佳方法,即基于中间数据集的匹配,并且属于第三数据集的日期范围。最终结果是将匹配值从第三个数据集中返回到第一个。
以下是示例数据帧的头部以增加清晰度:
> head(SalesData, 10)
sale_id sale_amt int_rate sale_date sale_status
1 1 7000 10.71 2008-05-01 Fully Paid
2 2 10800 13.57 2009-11-01 Fully Paid
3 3 7500 10.08 2008-04-01 Fully Paid
4 4 3000 14.26 2009-09-01 Fully Paid
5 5 5600 14.96 2010-02-01 Charged Off
6 6 2800 11.49 2010-08-01 Fully Paid
7 7 10000 8.59 2009-10-01 Fully Paid
8 8 18000 10.39 2008-03-01 Fully Paid
9 9 5000 15.13 2008-04-01 Fully Paid
10 10 9600 12.29 2008-03-01 Fully Paid
> head(EmployeeSales, 10)
sale_id empl_name empl_num
1 1 Dakota 4
2 2 Dakota 4
3 3 Kami 9
4 4 Adel 1
5 5 Adel 1
6 6 Farah 6
7 7 Kami 9
8 8 Kami 9
9 9 Ida 7
10 10 Kami 9
> head(EmployeeMap, 10)
empl_num empl_name skill_lvl team start_date end_date
1 1 Adel Beg Red 2007-06-01 2008-05-31
2 1 Adel Int Red 2008-06-01 2010-10-31
3 1 Adel Adv Red 2010-11-01 2999-12-12
4 2 Bailey Beg Blue 2010-08-01 2011-04-30
5 2 Bailey Beg Red 2011-05-01 2999-12-12
6 3 Casey Beg Blue 2010-08-01 2010-12-31
7 3 Casey Int Blue 2011-01-01 2999-12-12
8 4 Dakota Beg Red 2007-06-01 2009-08-30
9 4 Dakota Int Red 2009-09-01 2010-08-30
10 4 Dakota Adv Red 2010-09-01 2011-08-30
所需的输出会将 EmployeeMap 中的 empl_num、sales_team 和 Skill_level 添加到每个 sale_id 的 SalesData。
在尝试将步骤概念化时,这是我的想法,但也许有更好的方法: 从 SalesData 中获取 sale_id,将其与 Employee Sales 中的 sale_id 匹配并获取 empl_num。获取 empl_num 并将其与 Employee Map 中的 empl_num 匹配。现在我们需要从 SalesData 中获取 sale_date 并找出它属于“start_date, end_date”的哪个范围。然后我们会采用匹配的团队和技能水平,并将其添加到 SalesData。
见下表:
> head(df2,10)
sale_id sale_amt int_rate sale_date sale_status empl_num team skill_lvl
1 1 7000 10.71 2008-05-01 Fully Paid 4 Red Beg
2 2 10800 13.57 2009-11-01 Fully Paid 4 Red Int
3 3 7500 10.08 2008-04-01 Fully Paid 9 Blue Beg
4 4 3000 14.26 2009-09-01 Fully Paid 1 Red Int
5 5 5600 14.96 2010-02-01 Charged Off 1 Red Int
6 6 2800 11.49 2010-08-01 Fully Paid 6 Red Beg
7 7 10000 8.59 2009-10-01 Fully Paid 9 Blue Int
8 8 18000 10.39 2008-03-01 Fully Paid 9 Blue Beg
9 9 5000 15.13 2008-04-01 Fully Paid 7 Blue Beg
10 10 9600 12.29 2008-03-01 Fully Paid 9 Blue Int
对我来说复杂的是,在 EmployeeMap 中,start_date 和 end_date 告诉我们每个员工开始和结束属于特定技能水平和团队的日期。但是每个员工都改变了技能水平和/或团队,所以每个员工都有多行。
例如,在 empl_id 为 1 的 EmployeeMap 中,我们可以看到 3 行告诉我们他们的 start_date 和 end_date,而他们在 Red Team 的技能级别为 Beg、Int、Adv。但是有些,例如 empl_id 2 会在保持相同技能水平的同时更改团队。其他人改变技能水平和团队。
如果您对解决此问题的最佳方法有任何见解,我将不胜感激。
【问题讨论】:
标签: r