Как использовать пакет pivottabler для получения суммы вместо количества - PullRequest
0 голосов
/ 01 апреля 2020

Функция 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()

Ответы [ 2 ]

0 голосов
/ 12 апреля 2020

Для суммирования измените вызов 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

На сайте есть много примеров, например, по расчетам: 1013 *http://pivottabler.org.uk/articles/v03-calculations.html

Надежда, которая помогает

Крис

0 голосов
/ 01 апреля 2020

Элегантное решение предоставляется в пакете rpivotTable

требует установки пакета 'htmlwidgets', который не нужно вызывать явно)

обеспечивает хорошее решение для того, что я искал, но я намеревался использовать данные из сводки в дальнейших вычислениях

сводка в R с суммами

библиотека (rpivotTable) rpivotTable (bhmtrainsSub, lines = c ("TO *) 1013 * "," TrainCategory "), cols =" PowerType ", ширина =" 100% ", высота =" 400px ")

...