【问题标题】:R - Select IDs only if some conditions are met per groupR - 仅当每个组满足某些条件时才选择 ID
【发布时间】:2019-05-10 07:50:33
【问题描述】:

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

我不太确定最聪明的方法,但最简单的方法是寻找特定活动的推荐技能,并与拥有至少 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 只推荐一个人,但通常应该有更多。

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

谢谢, 艾伦

【问题讨论】:

  • 逻辑是否正确df1 %>% group_by(Region, ActivityID, PersonID) %>% mutate(sn = sum(unique(Skills_Person) %in% Recommended_Skills)/n() >= 0.5 )
  • 我的问题是,Recommended_Skills 是针对整列比较还是按组比较
  • 嗨@akrun,感谢您的回答。推荐的_技能是每个活动。我尝试运行上面的代码,但我没有匹配特定活动的 Skills_Person 和 Recommend_Skills。

标签: r select group-by recommendation-engine


【解决方案1】:

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 分组,并为ActivityID 找到与Recommended_Skills 匹配技能最高的PersonID

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 2012-03-29
    相关资源
    最近更新 更多