簡體   English   中英

如何在 R 中找到相似度?

[英]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,      
)

在數據集中,

  • A店賣1、3
  • B店賣1、4
  • 店鋪C賣 2, 5
  • D店賣3, 1
  • E店只賣3件

所以現在,我想在這里計算 Jaccard 指數。 例如,讓我們以shop Ashop 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM