在我意识到我的代码不足以解释问题后,我做了一个编辑 - 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]
其他想法?
当然上面的示例代码是我使用的实际数据的简化版本,但想法是一样的。
谢谢你, 亲切的问候。
答案 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
是一个相当全面的替代品,具有额外的灵活性。