Функция Excel pivot для изменения счетчика на сумму # Использование пакета pivottabler в r
В сводных таблицах Excel параметры поля значений позволяют изменять счетчик на Sum. Используя код из CBailiss, который был размещен на этом форуме в подмножестве встроенного набора данных, bhmtrains, этот код генерирует сводную таблицу, но сумма не отличается от количества. Сводка, сгенерированная этим кодом поворот в Excel для генерации в 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)
}
функция суммы, которая возвращает счет - ищет исправление или лучшее решение
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)
}
Создание подмножества встроенного набора данных bhmtrains
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()