所以我不确定在 R 中使用哪个制表功能来解决我的问题。基本上我有一组数据(事件日志),其中包含各种用户ID作为参考,然后是每个事件的每个用户的特定产品。我想创建一个表格(产品x产品),以便特定用户购买两种不同的产品,相应的表格获得加+1 ......即
user1 prod2
user2 prod1
user1 prod1
所以基本上是条目(prod1,prod2)= 1(和(prod2,prod1)= 1,以及对称性)....对角线将是1或0不是非常重要....我可以写这个循环可能会遍历数据,但如果有一个函数已经我想知道。
答案 0 :(得分: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