基于第三变量的列联表(数字)

Fre*_*ddy 4 r

前段时间我提出了一个关于创建市场篮子数据的问题.现在我想创建一个类似的data.frame,但是基于第三个变量.不幸的是我遇到了问题.上一个问题:
Rshasha和@ SimonO101中创建市场篮子矩阵的有效方法给了我很好的答案,但我无法正确改变他们的anwser.我有以下数据:

Customer <- as.factor(c(1000001,1000001,1000001,1000001,1000001,1000001,1000002,1000002,1000002,1000003,1000003,1000003))
Product <- as.factor(c(100001,100001,100001,100004,100004,100002,100003,100003,100003,100002,100003,100008))
input <- data.frame(Customer,Product)
Run Code Online (Sandbox Code Playgroud)

我现在可以通过以下方式创建列联表:

input_df <- as.data.frame.matrix(table(input))
Run Code Online (Sandbox Code Playgroud)

但是我有一个第三个(数字)变量,我想在表中输出.

Number <- c(3,1,-4,1,1,1,1,1,1,1,1,1) 
input <- data.frame(Customer,Product,Number)
Run Code Online (Sandbox Code Playgroud)

现在代码(当然,现在有3个变量)不再起作用了.我正在寻找的结果具有唯一的Customer作为行名称和唯一的Product作为列名称.并且Number为值(如果不存在则为0),此数字可以通过以下公式计算:

input_agg <- aggregate( Number ~ Customer + Product, data = input, sum)
Run Code Online (Sandbox Code Playgroud)

希望我的问题很明确,如果不清楚,请发表评论.

jub*_*uba 6

你可以用xtabs 它:

R> xtabs(Number~Customer+Product, data=input)

         Product
Customer  100001 100002 100003 100004 100008
  1000001      0      1      0      2      0
  1000002      0      0      3      0      0
  1000003      0      1      1      0      1
Run Code Online (Sandbox Code Playgroud)