【问题标题】:googleVis: multi-level sorting feature gvisTable sortColumn?googleVis:多级排序功能gvisTable sortColumn?
【发布时间】:2025-12-31 05:45:07
【问题描述】:

有没有办法在 googleVis 的 gvisTable 中进行多级排序? 我正在使用 Shiny 来显示这样的 gvisTable:

x <- gvisTable(tabData,options=list(sortColumn=2,showRowNumber='TRUE',allowHtml='TRUE'),chartid=tabID)

我想知道是否有一种方法可以对值进行排序,例如,首先按第 2 列,然后按第 3 列。

如果 gvisTable 没有此功能,但 googleVis 之外的其他包中的另一种类型的表可以在 Shiny 中执行,那也可以。 有什么想法吗?

【问题讨论】:

  • 您尝试过类似sortColumn=c(2,3) 的方法吗?

标签: r shiny googlevis


【解决方案1】:
install.packages('shiny', type = 'source')

ui.r:

library(shiny)
shinyUI(bootstrapPage(
  dataTableOutput('tbl')
))

server.r:

library(shiny)
shinyServer(function(input, output) {
  output$tbl <- renderDataTable({
    data.frame(x = 1:10, y = c(1, 1, 2, 2, 3, 3, 4, 4, 5, 5))
  })
})

来自 dataTables 的描述: http://datatables.net/examples/basic_init/multi_col_sort.html

“如果 bSort 初始化程序为真(默认情况下),则这种多重排序机制始终处于活动状态,并且最终用户可以通过点击他们想要添加到排序的列‘shift’来激活它。”

因此,当您运行此应用程序时,尝试按“y”排序,然后按住 shift 单击 x(注意列标题​​中紫色突出显示的箭头),以查看“y”列保持排序状态,而“ x" 列更改排序顺序,使 y 固定。

【讨论】:

  • 我正在通过 rCharts 完成这项工作,但遇到了一个问题。等待查看解决方案:*.com/q/20971453/719016
  • 真不幸,我在 /inst/apps/notebook/www/assets/ace-shiny.css 的 rCharts 包中找到了该文件,该文件使用了 url fonts.googleapis.com/css?family=Open+Sans+Condensed:700。这是一个非常丑陋的解决方案,但您可能只需将其更改为 https 并从源代码编译......我想在那之后会出现更多错误。比我更擅长服务器管理的人可能会有更好的答案。或者,您可以通过 url 的 http 版本访问您的服务器吗?
  • 在 rCharts 稍微清理一下之前,这似乎无法解决。我会追上去的。
  • 我也尝试在没有 rCharts 包装的情况下直接使用 dataTableOutput,但是我的闪亮服务器 0.4.0 抱怨 could not find function "dataTableOutput",这让我觉得它的闪亮版本太旧了。什么时候把dataTable加到shiny的?
  • 使用最新版本的 Shiny 会更安全,我相信它是 0.8.0。该软件包正在快速开发中。
【解决方案2】:

你可以对数据源进行排序,对吧?

orderedData <- tabData[order(tabData[2], tabData[3]),]
x <- gvisTable(orderedData,options=list(showRowNumber='TRUE',allowHtml='TRUE'),chartid=tabID)

【讨论】:

    【解决方案3】:

    您可以简单地按多列排序,例如:

    sortColumn=c(0,1,2) ## sort by columns 1:3
    

    【讨论】: