在表中包含第三个变量

时间:2015-11-27 15:23:06

标签: r

在我意识到我的代码不足以解释问题后,我做了一个编辑 - appologies。

我有一个包含四列的数据框

purchaseId <- c("abc","xyz","def","ghi")
product <- c("a","b","c","a")
quantity <- c(1,2,2,1)
revenue <- c(500,1000,300,500)
t <- data.frame(purchaseId,product, quantity, revenue)

table(t$product,t$quantity)

运行此查询

table(t$product,t$quantity)

返回一个表格,表明每个组合发生的次数

    1 2
  a 2 0
  b 0 1
  c 0 1

我想要做的是将产品和数量绘制为行和列(如上所示),但将收入作为实际值。

结果应如下所示:

   1    2
a 1000  0
b  0  1000
c 300   0

这将允许我创建一个可以作为csv导出的表。

有人可以帮助我吗?

编辑 - 下面建议的代码在140K行的实际数据集上抛出以下错误:

Error: dims [product 21525] do not match the length of object [147805]

其他想法?

当然上面的示例代码是我使用的实际数据的简化版本,但想法是一样的。

谢谢你, 亲切的问候。

2 个答案:

答案 0 :(得分:0)

table(t$product,t$quantity)*t$revenue

答案 1 :(得分:0)

使用library(reshape2)library(data.table)

dcast(t,product ~ quantity, value.var = "revenue", fun = sum)

语法相当简单:

  • 设置您正在重铸的数据框
  • 设置结果数据框的“公式”。 ~的LHS是行方向的枢轴,RHS是列式的。
  • value.var告诉您我们要在单元格中放置哪个列,并使用fun我们想要与sum函数进行汇总

正如您在评论中提到的熟悉Excel Pivot表,值得注意的是dcast是一个相当全面的替代品,具有额外的灵活性。