因此,我不确定在R中使用哪种表格函数来解决我的问题。基本上,我有一组数据(一个事件日志),以各种用户ids作为引用,然后为每个事件的每个用户提供特定的产品。我想创建一个表表(产品x产品),因为任何时候特定的用户已经购买了两个不同的产品,相应的表得到一个+1.即
user1 prod2
user2 prod1
user1 prod1因此,基本上条目(prod1,prod2) =1(和(prod2,prod1) = 1,以及由于对称性).对角线要么是1的,要么是0的不是超级重要的.我可以为它编写一个循环,以便在数据中运行,但是如果已经有一个函数,我很想知道。
发布于 2013-04-11 00:19:23
读取数据;使用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 1https://stackoverflow.com/questions/15938221
复制相似问题