[英]How to find the similarity in R?
我有一個數據集,如下所示:
它顯示了哪家商店出售了哪本書。
df <- tribble(
~shop, ~book_id,
"A", 1,
"B", 1,
"C", 2,
"D", 3,
"E", 3,
"A", 3,
"B", 4,
"C", 5,
"D", 1,
)
在數據集中,
所以現在,我想在這里計算 Jaccard 指數。 例如,讓我們以shop A和shop B為例。 A 和 B 出售三本不同的書(書 1、書 3、書 4)。 但是,兩家商店只銷售一種產品(這是產品 1)。 所以,這里的Jaccard 指數應該是33.3% (1/3) 。
這是所需數據的示例:
df <- tribble(
~shop_1, ~shop_2, ~similarity,
"A", "B", 33.3,
"B", "A", 33.33,
"A", "C", 0,
"C", "A", 0,
"A", "D", 100,
"D", "A", 100,
"A", "E", 50,
"E", "A", 50,
)
非常感謝任何評論/幫助。 提前致謝。
我不知道 package 但您可以編寫自己的 function。 我猜你所說的相似性是這樣的:
similarity <- function(x, y) {
k <- length(intersect(x, y))
n <- length(union(x, y))
k / n
}
然后您可以使用tidyr::crossing
將相同的數據框與自身合並
dfg <- df %>% group_by(shop) %>% summarise(books = list(book_id))
crossing(dfg %>% set_names(paste0, "_A"), dfg %>% set_names(paste0, "_B")) %>%
filter(shop_A != shop_B) %>%
mutate(similarity = map2_dbl(books_A, books_B, similarity))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.