首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用pivottabler包获取sum而不是count

如何使用pivottabler包获取sum而不是count
EN

Stack Overflow用户
提问于 2020-04-01 10:26:14
回答 2查看 518关注 0票数 0

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

代码语言:javascript
复制
library(pivottabler)

由CBAILISS提供的函数

代码语言:javascript
复制
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函数-寻求修复或更好的解决方案

代码语言:javascript
复制
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的子集

代码语言:javascript
复制
bhmtrainsdf <- bhmtrains[c(3:6)]
bhmtrainsSub <- bhmtrainsdf[0:500, ]

创建和渲染轴心

代码语言:javascript
复制
    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()
EN

回答 2

Stack Overflow用户

发布于 2020-04-02 00:07:21

在package rpivotTable中提供了一个优雅的解决方案

需要安装无需显式调用的包‘htmlwidgets’)

为我所寻求的东西提供了一个很好的解决方案,但我打算在进一步的计算中使用来自pivot的数据

pivot in R with sums

库(RpivotTable) rpivotTable(bhmtrainsSub,rows=c("TOC","TrainCategory"),cols="PowerType",width="100%",height="400px")

票数 0
EN

Stack Overflow用户

发布于 2020-04-13 00:44:34

总而言之,修改defineCalculation调用,例如

代码语言:javascript
复制
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()

类似地,对于均值:

代码语言:javascript
复制
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

希望这能有所帮助

克里斯

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60962736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档