2013-04-10 83 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