首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在rPivotTable中排序

在rPivotTable中排序
EN

Stack Overflow用户
提问于 2015-12-22 07:02:22
回答 2查看 785关注 0票数 1

我有了这个rpivotTable,而不是手动输入我想要排序的值,而是希望按数据透视表中的值排序。所以基本上,当我更改左列上的变量时,我希望按表中的值对它们进行排序。

下面是一个可重复使用的示例:

代码语言:javascript
复制
library(devtools)
devtools::install_github("smartinsightsfromdata/rpivotTable")
library(rpivotTable)   

data(HairEyeColor)
rpivotTable(data = HairEyeColor, rows = "Hair",cols="Eye", vals = "Freq", aggregatorName = "Sum", rendererName = "Table", sorters = "
function(attr) { 
var sortAs = $.pivotUtilities.sortAs;
if (attr == \"Hair\") { return sortAs([\"Red\", \"Brown\", \"Blond\", \"Black\"]); }
}", width="100%", height="400px")
EN

回答 2

Stack Overflow用户

发布于 2020-11-07 08:42:45

我在寻找解决方案时遇到了你的问题,我相信我已经找到了一种方法来做你想要的事情。我知道这个问题已经超过2年了,但希望它能被需要解决方案的人找到,并被认为是有帮助的。

要按"vals“排序,也要按另一个度量(如"cols”或"rows“)排序,只需在sorters函数中包含另一个"if”语句。

以开发者提供的可重现示例为起点:

代码语言:javascript
复制
library(rpivotTable)   
data(HairEyeColor)
rpivotTable(data = HairEyeColor, rows = "Hair",cols="Eye", vals = "Freq", aggregatorName = "Sum", rendererName = "Table", sorters = "
function(attr) { 
var sortAs = $.pivotUtilities.sortAs;
if (attr == \"Hair\") { return sortAs([\"Red\", \"Brown\", \"Blond\", \"Black\"]); }
}", width="100%", height="400px")

下一步是在发色后的右括号后面添加另一个( if (attr == '\"\")语句。例如,假设您还希望按Eye Color进行排序,首先列出的颜色是棕色而不是蓝色。您将编写以下代码来完成此操作:

代码语言:javascript
复制
library(rpivotTable)   
data(HairEyeColor)
rpivotTable(data = HairEyeColor, rows = "Hair",cols="Eye", vals = "Freq", 
aggregatorName = "Sum", rendererName = "Table", sorters = "
function(attr) { 
var sortAs = $.pivotUtilities.sortAs;
if (attr == \"Hair\") { return sortAs([\"Red\", \"Brown\", \"Blond\", \"Black\"]);}
if (attr == \"Eye\") { return sortAs([\"Brown\", \"Blue\", \"Green\", \"Hazel\"]);}
}", width="100%", height="400px")

请记住,这个包是围绕PivotTable.js开发的,因此您可以在代码中包含$.pivotUtilities.sortAs函数的功能来执行其他排序,例如升序和降序排序。请参阅the PivotTable.js documentation

票数 0
EN

Stack Overflow用户

发布于 2020-12-31 01:57:55

我不确定这是否是OP要找的东西,但我也遇到了类似的问题,如果有人想要对rpivottable进行排序,那么分享一下这个解决方案可能会很有用。

我想按聚合器值排序,而不是按列/行上的变量排序。在聚合器下拉菜单旁边有两个带有小箭头的按钮,您可以单击它们来执行此操作。但是,我希望默认情况下以特定方式对表进行排序,这样用户就不必单击该按钮。

我尝试了上面提到的解决方案,但那不是我想要的。排序选项似乎对我的用例没有帮助。

如果您的表格位于某种html文档(rmarkdown、shiny、flexdashboard等)上,那么您可以使用一些javascript在页面加载时单击按钮。将此代码放在文档中的某个位置(代码块之外)

代码语言:javascript
复制
<script>
window.addEventListener("load", function(){
  //Code inside this function will be executed after the page has been fully loaded
  document.getElementsByClassName("pvtColOrder")[0].click();
  document.getElementsByClassName("pvtColOrder")[0].click();
});
</script>

这将按列的降序对可视化进行排序(单击按钮2次)。如果将更改为1,则它将以文档中的第二个表为目标,以2为目标,第三个表为目标,依此类推。"pvtRowOrder“将单击该按钮对行进行排序。

我总是将rpivottables放在一个flexdashboard中,因为你可以定义css来定制字体,添加滚动,并在滚动时使表格的标题贴在顶部,所以这个解决方案对我来说很好。

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

https://stackoverflow.com/questions/34405839

复制
相关文章

相似问题

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