[英]R: compare two groups of vectors
我已經制作了兩個推薦系統,並希望主持他們推薦的產品,並了解有多少產品是相互的 。 我將兩個結果加入到數據框中 - 一個推薦系統列以“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時。
我們可以使用apply
循環遍歷數據集子集的行(刪除'ID'列),獲取前3個和后3個元素的intersect
length
df$mutual_recommendation <- apply(df[-1], 1, FUN = function(x)
length(intersect(x[1:3], x[4:6])))
df$mutual_recommendation
#[1] 3 0 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.