Excel pivot function to change count to sum#在r中使用pivottabler包
在Excel透视中,值字段设置允许从count更改为Sum。使用来自CBailiss的代码,这些代码发布在本论坛内置数据集的子集bhmtrain上,此代码生成了一个数据透视表,但总和与计数没有什么不同。pivot generated by this code pivot in Excel to generate in R
library(pivottabler)由CBAILISS提供的函数
getPercentageOfAllCategories <- function(pivotCalculator, netFilters, format, baseValues, cell) {
trains <- pivotCalculator$getDataFrame("bhmtrainsSub")
netFilters$setFilterValues(variableName="TrainCategory", type="ALL", values=NULL, action="replace")
filteredTrains <- pivotCalculator$getFilteredDataFrame(trains, netFilters)
totalTrainsAllCategories <- nrow(filteredTrains)
percentageOfAllCategories <- baseValues$N / totalTrainsAllCategories * 100
value <- list()
value$rawValue <- percentageOfAllCategories
value$formattedValue <- pivotCalculator$formatValue(percentageOfAllCategories, format=format)
return(value)}
返回count的sum函数-寻求修复或更好的解决方案
getSumOfAllCategories <- function(pivotCalculator, netFilters, format, baseValues, cell) {
trains <- pivotCalculator$getDataFrame("bhmtrainsSub")
netFilters$setFilterValues(variableName="TrainCategory", type="ALL", values=NULL, action="replace")
filteredTrains <- pivotCalculator$getFilteredDataFrame(trains, netFilters)
totalTrainsAllCategories <- nrow(filteredTrains)
SumOfAllCategories <- sum(baseValues$N)
value <- list()
value$rawValue <- SumOfAllCategories
value$formattedValue <- pivotCalculator$formatValue(SumOfAllCategories, format=format)
return(value)}
创建内置数据集bhmtrain的子集
bhmtrainsdf <- bhmtrains[c(3:6)]
bhmtrainsSub <- bhmtrainsdf[0:500, ]创建和渲染轴心
pt <- PivotTable$new()
pt$addData(bhmtrainsSub)
pt$addColumnDataGroups("PowerType")
pt$addRowDataGroups("TOC")
pt$addRowDataGroups("TrainCategory")
pt$defineCalculation(calculationName="N", summariseExpression="n()")
pt$defineCalculation(calculationName="Percentage", caption="%", format="%.1f %%", basedOn="N", type="function", calculationFunction=getPercentageOfAllCategories)
pt$defineCalculation(calculationName="Sum", caption="SUM", basedOn="N", type="function", calculationFunction=getSumOfAllCategories)
pt$renderPivot()发布于 2020-04-02 00:07:21
在package rpivotTable中提供了一个优雅的解决方案
需要安装无需显式调用的包‘htmlwidgets’)
为我所寻求的东西提供了一个很好的解决方案,但我打算在进一步的计算中使用来自pivot的数据
库(RpivotTable) rpivotTable(bhmtrainsSub,rows=c("TOC","TrainCategory"),cols="PowerType",width="100%",height="400px")
发布于 2020-04-13 00:44:34
总而言之,修改defineCalculation调用,例如
library(pivottabler)
pt <- PivotTable$new()
pt$addData(bhmtrains)
pt$addColumnDataGroups("TrainCategory")
pt$addRowDataGroups("TOC")
pt$defineCalculation(calculationName="TotalMPH",
summariseExpression="sum(SchedSpeedMPH, na.rm=TRUE)")
pt$renderPivot()类似地,对于均值:
library(pivottabler)
pt <- PivotTable$new()
pt$addData(bhmtrains)
pt$addColumnDataGroups("TrainCategory")
pt$addRowDataGroups("TOC")
pt$defineCalculation(calculationName="MeanMPH",
summariseExpression="mean(SchedSpeedMPH, na.rm=TRUE)", format="%.1f")
pt$renderPivot()有关更多信息,请访问:
http://pivottabler.org.uk/articles/v01-introduction.html
该网站中有许多示例,例如,有关计算的更多信息,请访问:http://pivottabler.org.uk/articles/v03-calculations.html
希望这能有所帮助
克里斯
https://stackoverflow.com/questions/60962736
复制相似问题