我知道你说rpivotTable
是不是你很追求的,但我认为它可以配置做一些繁重的工作,
下面是一个例子(使用rpivotTable
的操作,DT
展现data.frame,rvest
解析从DOM的innerHTML,有可能是一个更好的数据格式,通过从客户端的表对象,但是这是概念验证):
ui.R
library(shiny)
library(DT)
library(rpivotTable)
FullPage <- fluidPage(
DT::dataTableOutput('aSummaryTable'),
rpivotTableOutput('RESULTS')
)
FullPage
server.R:
library(shiny)
library(rpivotTable)
library(DT)
library(rvest)
function(input, output, session) {
# Make some sample data
qbdata <- reactive({
expand.grid(LETTERS,1:3)
})
# Clean the html and store as reactive
summarydf <- eventReactive(input$myData,{
input$myData %>%
read_html %>%
html_table(fill = TRUE) %>%
# Turns out there are two tables in an rpivotTable, we want the second
.[[2]]
})
# show df as DT::datatable
output$aSummaryTable <- DT::renderDataTable({
datatable(summarydf(), rownames = FALSE)
})
# Whenever the config is refreshed, call back with the content of the table
output$RESULTS <- renderRpivotTable({
rpivotTable(
qbdata(),
onRefresh =
htmlwidgets::JS("function(config) {
Shiny.onInputChange('myData', document.getElementById('RESULTS').innerHTML);
}")
)
})
}
rpivotTable非常接近你想要的。除出口外。如果他们想要导出,则可能需要深入回调以获取表格的当前状态。 – Shape
我编辑了我的问题。我并不需要图形和导出功能才能成为解决方案的一部分。我可以根据自己的具体要求轻松实施它们。在这方面rpivotTable不是我所需要的,因为它试图做图形,但不是很优雅的方式,我没有看到任何自定义选项。此外,它不返回汇总数据帧,因此我无法对结果进行任何进一步处理(例如导出数据或创建自己的图形)。 – Sasha
实际上有相当数量的自定义选项,尽管您需要检查文档的pivottable.js(与使用其他JS库端口到R一样,比如DT,文档主要留给JS库使用更新,html小部件只是一个包装)。我发现一种方法可以将你的输出作为闪亮的对象返回,你只需要在rpivotTable上使用onRefresh参数,然后通过DOM访问它。 – Shape