Looking at your desired output, you are looking for the crossprod
function:
crossprod(table(test1))
# product
# product p1 p2 p3 p4
# p1 4 1 1 0
# p2 1 3 1 0
# p3 1 1 4 1
# p4 0 0 1 2
This is the same as crossprod(table(test1$user, test1$product))
(reflecting Dennis’s comment).