我制作了两个推荐系统,并希望主持他们推荐的产品,并查看有多少产品相互。我将两个结果加入到数据框中 - 一个推荐系统列以“z”开头,另一个以“b”开头。
示例数据:
df <- data.frame(z1 = c("a", "s", "d"), z2 = c("z", "x", "c"), z3 = c("q", "w", "e"),
b1 = c("w", "a", "e"), b2 = c("a", "i", "r"), b3 = c("z", "w", "y"))
ID z1 z2 z3 b1 b2 b3
1 a z q q a z
2 s x w a i r
3 d c e r e y
期望的结果:
ID z1 z2 z3 b1 b2 b3 mutual_recommendation
1 a z q q a z 3
2 s x w a i r 0
3 d c e e r y 1
问题是订单可能不一样,并且所有组合的合并都是通过Case或ifelse组合的,特别是当Top-N推荐的数量将变为10时。
答案 0 :(得分:2)
我们可以使用apply
循环遍历数据集子集的行(删除“ID”列),获取前3个和下一个length
的{{1}} 3个元素
intersect
答案 1 :(得分:1)
这是另一个解决方案(注意:我更改了data.frame
代码以生成问题中实际显示的数据框 - 它们不匹配):
> library(dplyr)
> df %>% mutate(mutual_recommendation=apply(df,1,function(x) sum(x[1:3] %in% x[4:6]) ))
z1 z2 z3 b1 b2 b3 mutual_recommendation
1 a z q q a z 3
2 s x w a i r 0
3 d c e r e y 1