2013-04-10 74 views
0

所以我不確定哪個列表函數在R中用於我的問題。基本上我有一組數據(一個事件日誌),各種用戶ID作爲參考,然後是每個用戶對每個事件的具體產品。我想創造一個隨時隨地特定用戶已經購買了兩種不同的產品對應的表得到一個加+1列一個表(產品X的產品)....即事件日誌列表表

user1 prod2 
user2 prod1 
user1 prod1 

所以基本上條目(PROD1,Prod2的) = 1(和(prod2,prod1)= 1,以及由於對稱性)....對角線將是1或0不是非常重要....我可以爲此編寫一個循環來運行數據,但如果已經有功能了,我很想知道。

+0

能否請您提供一些數據?你在尋找成對列表還是更像'table()'的基本東西? – Stedy 2013-04-11 00:05:17

+0

成對列表我認爲。排(i,j)=(同時購買i和j的用戶數量) – 2013-04-11 00:10:47

回答

3

閱讀數據;使用xtabs將其按照產品(列)錶轉換爲用戶(行);取表的交叉產品,本身並減少超過1:1的任何元素:

# read in data 
Lines <- "user1 prod2 
user2 prod1 
user1 prod1 
user3 prod2 
user4 prod3 
user4 prod2 
user5 prod4 
" 
DF <- read.table(text = Lines) 

# compute required matrix 
pmin(crossprod(xtabs(~., DF)), 1) 

最後一行返回:

 V2 
V2  prod1 prod2 prod3 prod4 
    prod1  1  1  0  0 
    prod2  1  1  1  0 
    prod3  0  1  1  0 
    prod4  0  0  0  1 
+0

哇。如此華麗。太好了! – 2013-04-11 01:05:54