R-仅在每组满足某些条件的情况下选择ID

时间:2019-05-10 07:50:34

标签: r select group-by recommendation-engine

我正在尝试建立一个推荐器,根据人们的技能为特定活动推荐合适的人。 为此,我首先构建了一个推荐引擎,该引擎根据历史数据(从事这些活动的人员所拥有的技能)为每个活动提供技能推荐。 现在,诀窍是将这些对象与特定的人联系起来。

我不太确定最聪明的方法,但是最简单的方法是寻找特定活动的推荐技能,并与拥有至少50%的员工相匹配技能。

我的数据集如下:

Region    ActivityID   Recommended_Skills     PersonID     Skills_Person
France    123          Python                 ABC          R
France    123          PowerPoint             ABC          Mikado
France    123          R                      ABC          Python
France    123          Word                   ABC          Photoshop    
France    123          Python                 XYZ          Finance
France    123          PowerPoint             XYZ          Powerpoint    
France    123          R                      XYZ          Law
France    123          Word                   XYZ          Analytics    
Spain     789          JavaScript             DEF          PowerPoint
Spain     789          PowerPoint             DEF          Word    
Spain     789          UI                     DEF          R
Spain     789          Office                 DEF          Finance    
Spain     789          Python                 CVB          JavaScript
Spain     789          PowerPoint             CVB          Office

基本上,在这种情况下,我期望的数据帧应如下所示:

Region    ActivityID     PersonID
France    123            ABC
Spain     789            CVB

实际上,在这种情况下,不建议将DEF用于活动123,因为需要有一个group_by“ Region”。另外,在这种情况下,每个ActivityID仅建议一个人,但通常应该更多。

我希望这已经足够清楚了;任何帮助将不胜感激。

谢谢, 艾伦

1 个答案:

答案 0 :(得分:0)

一种tidyverse的方式

library(tidyverse)

df %>%
  group_by(Region, ActivityID) %>%
  summarise(PersonID = names(which.max(map_dbl(split(Skills_Person, PersonID), 
                        ~sum(Recommended_Skills %in% .)))))


#  Region ActivityID PersonID
#  <chr>  <chr>      <chr>   
#1  France 123        ABC     
#2  Spain  789        CVB    

我们将每个RegionActivity分组,然后找到一个PersonID,该Recommended_SkillsActivityID的匹配程度最高。