簡體   English   中英

在 R 中查找所有成對共性

[英]Finding All Pairwise Commonalities in R

我現在一直是 StackExchange Lurker,但之前在 R 中找到這個問題的運氣並不好,所以我為此創建了一個用戶名。

基本上我有一個客戶和商店的數據集(大約 260k 客戶和 300 家商店,大多數客戶訪問至少 10 個獨特的商店),我想看看哪些站點與客戶重疊最多(即站點 A 和 B 共享這個許多客戶,A 和 C 那么多,......對於所有對站點)。

可重現的例子:

begindata<-data.frame(customer_id=c(1,2,3,1,2,3,4,1,4,5), site_visited=c('A', 'A', 'A', 'B', 'B', 'B', 'B', 'C', 'D', 'D'))

如果可能的話,我希望看到以下內容:

final_table<-data.frame(site_1=c('A', 'A', 'A', 'B', 'B', 'C'), site_2=c('B', 'C', 'D', 'C', 'D', 'D'), number_of_commonalities=c(3, 1,1,1,1,0))

我曾嘗試根據 customer_id 將 begindata 加入到自己,就像這樣......

attempted_df<-begindata %>% left_join(begindata, by="customer_id") %>% count(site_visited.x, site_visited.y)

我知道這是多余的(去 A、B、3 的行;B、A、3;以及去 A、A、3 的行)。

但是,由於大小限制,無法使用我的實際數據集(260k 成員和 300 個站點)執行此操作。

任何建議將不勝感激! 如果我的帖子很爛,也請放過我——我想我已經遵守了規則和建議嗎?

我們可以使用combn

number_of_commonalities <- combn(unique(begindata$site_visited), 2, 
    FUN = function(x) with(begindata, 
    length(intersect(customer_id[site_visited == x[1]], 
     customer_id[site_visited == x[2]]))))

names(number_of_commonalities) <- combn(unique(begindata$site_visited), 2, 
         FUN = paste, collapse="_")

stack(number_of_commonalities)[2:1]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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