0

所以我不确定在R中使用哪个制表函数来解决我的问题。基本上,我有一组数据(一个事件日志),其中包含各种用户 ID 作为参考,然后是每个用户针对每个事件的特定产品。我想为特定用户购买两种不同产品的任何时候创建一个列表表(产品 x 产品),相应的表会得到 +1 .... 即

user1  prod2
user2  prod1
user1  prod1

所以基本上输入(prod1,prod2)= 1(和(prod2,prod1)= 1,以及由于对称性)......对角线将是1或0不是超级重要......我可以为这可能会遍历数据,但如果已经有一个功能,我很想知道。

4

1 回答 1

3

Read in the data; use xtabs to convert it to a user (rows) by product (columns) table; take the cross product of the table with itself and reduce any element that is more than 1 to 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)

The last line returns:

       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
于 2013-04-11T00:19:23.417 回答