我想创建一个计算字段以用于rpivotTable
包,类似于 excel 中看到的功能。
例如,请考虑下表:
+--------------+--------+---------+-------------+-----------------+
| Manufacturer | Vendor | Shipper | Total Units | Defective Units |
+--------------+--------+---------+-------------+-----------------+
| A | P | X | 173247 | 34649 |
| A | P | Y | 451598 | 225799 |
| A | P | Z | 759695 | 463414 |
| A | Q | X | 358040 | 225565 |
| A | Q | Y | 102068 | 36744 |
| A | Q | Z | 994961 | 228841 |
| A | R | X | 454672 | 231883 |
| A | R | Y | 275994 | 124197 |
| A | R | Z | 691100 | 165864 |
| B | P | X | 755594 | 302238 |
| . | . | . | . | . |
| . | . | . | . | . |
+--------------+--------+---------+-------------+-----------------+
(我的实际表有更多的列,包括维度和度量、时间等,我需要定义多个这样的"计算列"(
如果我想计算缺陷率(这将是Defective Units/Total Units
(,并且我想按前三列中的任何一列进行聚合,我无法做到。
我尝试通过引用分配(:=
(,但这似乎仍然不起作用,并总结了缺陷率(即sum(Defective_Units/Total_Units)
(,而不是sum(Defective_Units)/sum(Total_Units)
:
myData[, Defect.Rate := Defective_Units / Total_Units]
这最终使我的缺陷率大于1。有没有任何地方可以声明一个计算字段,它只是一个聚合后计算的公式?
你很幸运 - 数据透视表的创建者.js通过实现一个名为"Sum over Sum"的聚合器以及更多类似,参见 https://github.com/nicolaskruchten/pivottable/blob/master/src/pivot.coffee#L111 和 https://github.com/nicolaskruchten/pivottable/blob/master/src/pivot.coffee#L169,预见了像你这样的情况(和我的
(。因此,我们将使用"总和"作为参数"聚合器名称",以及我们希望在"vals"参数中实现其商的列。
以下是 mtcars 数据中一个无意义的使用示例,以实现可重复性:
require(rpivotTable)
data(mtcars)
rpivotTable(mtcars,rows="gear", cols=c("cyl","carb"),
aggregatorName = "Sum over Sum",
vals =c("mpg","disp"),
width="100%", height="400px")